c++ - directivas - CMake: cómo pasar macros de preprocesador
directiva#include (2)
¿Cómo puedo pasar una macro al preprocesador? Por ejemplo, si quiero compilar una parte de mi código porque un usuario desea compilar la prueba unitaria, yo haría esto:
#ifdef _COMPILE_UNIT_TESTS_
BLA BLA
#endif //_COMPILE_UNIT_TESTS_
Ahora necesito pasar este valor de CMake al preprocesador. Establecer una variable no funciona, entonces, ¿cómo puedo lograr esto?
Si tiene muchas variables de preprocesador para configurar, puede usar configure_file :
Crea un archivo de configuración, ej. config.h.in
con
#cmakedefine _COMPILE_UNIT_TESTS_
#cmakedefine OTHER_CONSTANT
...
luego en tu CMakeLists.txt:
set(_COMPILE_UNIT_TESTS_ ON CACHE BOOL "Compile unit tests") # Configurable by user
set(OTHER_CONSTANT OFF) # Not configurable by user
configure_file(config.h.in config.h)
en el directorio de compilación, se genera config.h
:
#define _COMPILE_UNIT_TESTS_
/* #undef OTHER_CONSTANT */
Como sugiere robotik , debe agregar algo como include_directories(${CMAKE_CURRENT_BINARY_DIR})
a su CMakeLists.txt
para #include "config.h"
para trabajar en C ++.
add_definitions(-DCOMPILE_UNIT_TESTS)
el documento de CMake ) o modifique una de las variables de indicador ( CMAKE_CXX_FLAGS
, o CMAKE_CXX_FLAGS_<configuration>
) o configure la variable COMPILE_FLAGS
en el destino.
Además, los identificadores que comienzan con un guión bajo seguido de una letra mayúscula se reservan para la implementación. Identificadores que contienen doble guion bajo, también. Entonces no los uses.