Como posso usar boost.wave como pré-processador usando cmake
-
25-09-2019 - |
Pergunta
Estou tentando usar boost.wave como pré-processador em vez do pré-processador que vem com o compilador.Não consigo descobrir como conseguir isso.
Estou usando o CMake como gerador do sistema de compilação e como posso especificar que meu pré-processador é boost.wave.Isso deve funcionar tanto no Windows (MSVC) quanto no Linux (gcc).
Pesquisar e pesquisar arquivos Stack Overflow não rendeu nenhuma resposta
De qualquer forma, o compilador pré-processará o arquivo.Portanto, parece que duas etapas de pré-processamento estão envolvidas aqui.
Solução
Este é um processo de duas etapas.
Primeiro, você terá que dizer ao CMake para usar o Wave como um comando personalizado:use o CMake add_custom_command
.Depois de definir este comando, ele será invocado sempre que as dependências especificadas para o comando personalizado forem correspondidas.
Segundo, você terá que descobrir todas as macros predefinidas e o (sistema) incluir caminhos que seu compilador normalmente usa.Wave não sabe nada sobre um compilador específico.Portanto, para pré-processar um arquivo adequadamente para um compilador específico, todas as macros predefinidas (relevantes) (que normalmente são predefinidas pelo compilador) e todos os caminhos de inclusão do sistema (que são normalmente conhecidos pelo compilador por padrão) precisam ser passados durante a invocação Aceno.Se colocar todas essas opções na linha de comando do Wave for muito tedioso (e provavelmente é), você pode criar um arquivo de opções para Wave (adicione-o à linha de comando com @cfgfile
).Aqui está um exemplo para MSVC 2005:
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\include
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include
-D_MT
-D_MSC_VER=1400
-D_MSC_FULL_VER=140050727
-D_MSC_EXTENSIONS
-D_M_IX86
Certamente, você também pode adicionar outras opções para o Wave aqui.Ter diferentes arquivos de configuração para diferentes compiladores deve facilitar o gerenciamento de dentro do CMake.