tutorial smart remix online español curso aprender c++ makefile cmake header-files

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.