[英]How to read a CMake Variable in C++ source code
我想将库的版本号存储在一个地方。 因此,我在CMake文件中定义了这样一个变量:
SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")
使用此定义,我可以根据Microsoft的定义生成一个version.rc文件,将该文件编译到库中,然后正确显示在dll文件的属性窗口中。
现在,我也想在我的c ++源代码中使用此CMake变量,但实际上并没有找到有效的解决方案。 我已经尝试过其他类似的事情:
#ifndef VERSION_LIBINTERFACE
# define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
#endif
或这个:
unsigned int getLibInterfaceVersion()
{
return @LIBINTERFACE_VERSION@;
}
但是编译器不会接受任何东西。 由于我在CMake文档中的研究没有得到任何结果,因此我希望有人能给我必要的建议。
提前致谢。
最简单的方法是将LIBINTERFACE_VERSION作为带有add_definition的定义传递 :
add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )
但是,您也可以创建“头文件模板”并使用configure_file 。 这样,CMake将替换您的@ LIBINTERFACE_VERSION @。 这也更具扩展性,因为您可以在此处轻松添加额外的定义或变量...
例如,创建一个文件“ version_config.h.in”,如下所示:
#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
然后在您的cmakelists.txt中添加configure_file行:
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...
当然,请确保源文件中包含正确的version_config.h。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.