preprocesador directivas directiva c++ cmake

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.