it-swarm-pt.tech

Como definir uma macro de pré-processador C ++ por meio da linha de comando com o CMake?

Tento definir uma macro de pré-processador na linha de comando do CMake. Eu tentei:

set generator="Visual Studio 8 2005"
set params=-D MY_MACRO=1
cmake.exe -G %generator% %params% ..\some_project

mas não está definido quando eu compilar nem encontro o nome MY_MACRO nos arquivos gerados pelo CMake, exceto por CMakeCache.txt onde está presente no formulário:

MY_MACRO:UNINITIALIZED=1

Como eu posso fazer isso?

30
ybungalobill

A motivação por trás da pergunta era criar em lote bibliotecas de terceiros, e é por isso que eu queria evitar modificar o CMakeLists. Então, anos depois, mesmo que eu não precise mais disso, descobri que é facilmente alcançável por significa externo ao CMake:

  • Invoque o CMake como de costume, sem sinalizadores especiais.

  • Então:

    • Com MSVC: O compilador lê a variável de ambiente CL para obter argumentos extras da linha de comando. assim

      set CL=/DMY_MACRO=1 %CL%
      

      em seguida, chame o MSBuild para fazer seu trabalho.

    • Com outras cadeias de ferramentas: Pode ser possível definindo variáveis ​​de ambiente CFLAGS ou CXXFLAGS antes de chamar make, mas não verifiquei isso.

4
ybungalobill

Uma boa alternativa seria definir uma opção cmake:

OPTION(DEFINE_MACRO "Option description" ON) # Enabled by default

Seguido por uma condição:

IF(DEFINE_MACRO)
    ADD_DEFINITIONS(-DMACRO)
ENDIF(DEFINE_MACRO)

Em seguida, você pode ativar/desativar essa opção via linha de comando com cmake usando o sinalizador -D. Exemplo:

cmake -DDEFINE_MACRO=OFF ..

Para garantir que o compilador esteja recebendo a definição correta, você pode chamar make no modo detalhado e verificar se a macro está sendo definida ou não:

make VERBOSE=1

Essa é uma boa solução também porque make recompilará seu código quando qualquer uma das opções do cmake for alterada.

21
freitass

Experimente o seguinte: -D CMAKE_CXX_FLAGS=/DMY_MACRO=1

10
SlavaNov