smart - Cómo leer una variable CMake en código fuente C++
solidity español (1)
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 compilador 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.