我想将我的库的版本号存储在一个地方。所以我在 CMake 文件中定义了这样一个变量:
SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")
有了这个定义,我可以根据微软的定义生成一个 version.rc 文件,我将它编译到库中,然后在我的 dll 文件的属性窗口中正确显示。
现在我也想在我的 c++ 源代码中使用这个 CMake 变量,但实际上我没有找到可行的解决方案。我尝试过不同的方法:
#ifndef VERSION_LIBINTERFACE
# define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
#endif
或者这个:
unsigned int getLibInterfaceVersion()
{
return @LIBINTERFACE_VERSION@;
}
但是编译器不会接受任何东西。由于我在 CMake-Documentation 中的研究没有得到任何结果,希望有人能给我一些重要的建议。
提前致谢。
最佳答案
最简单的方法是通过 add_definition 将 LIBINTERFACE_VERSION 作为定义传递:
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。
关于c++ - 如何在 C++ 源代码中读取 CMake 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900661/