Cómo leer una variable CMake en código fuente C ++

Me gustaría almacenar el número de versión de mi biblioteca en un solo lugar. Así que he definido dicha variable en el archivo CMake:

SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface") 

Con esta definición puedo generar un archivo version.rc según la definición de Microsoft, que compilo en la biblioteca y luego aparece correctamente en la ventana de propiedades de mi archivo dll.

Ahora me gustaría usar esta variable CMake en mi código fuente de c ++ también, pero en realidad no llego a una solución funcional. He intentado diferentes cosas como esta:

  #ifndef VERSION_LIBINTERFACE # define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@ #endif 

o esto:

  unsigned int getLibInterfaceVersion() { return @LIBINTERFACE_VERSION@; } 

Pero el comstackdor no aceptará nada. Como mis investigaciones en CMake-Documentation no obtuvieron ningún resultado, espero que alguien pueda darme el consejo esencial.

Gracias por adelantado.

La forma más sencilla de hacerlo es pasar el LIBINTERFACE_VERSION como una definición con add_definition :

 add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} ) 

Sin embargo, también puede crear una “plantilla de archivo de encabezado” y usar configure_file . De esta forma, CMake reemplazará su @ LIBINTERFACE_VERSION @. Esto también es un poco más extensible porque puede agregar fácilmente definiciones o variables adicionales aquí …

Por ejemplo, crea un archivo “version_config.h.in”, con el siguiente aspecto:

 #ifndef VERSION_CONFIG_H #define VERSION_CONFIG_H // define your version_libinterface #define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@ // alternatively you could add your global method getLibInterfaceVersion here unsigned int getLibInterfaceVersion() { return @LIBINTERFACE_VERSION@; } #endif // VERSION_CONFIG_H 

A continuación, agregue una línea configure_file a su cmakelists.txt:

 configure_file( version_config.h.in ${CMAKE_BINARY_DIR}/generated/version_config.h ) include_directories( ${CMAKE_BINARY_DIR}/generated/ ) # Make sure it can be included... 

Y, por supuesto, asegúrese de que se incluya la versión_config.h correcta en sus archivos fuente.