Sno*_*fox 34 c++ makefile cmake header-files
我想在一个地方存储我的库的版本号.所以我在CMake文件中定义了这样一个变量:
SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")
Run Code Online (Sandbox Code Playgroud)
根据这个定义,我可以根据Microsoft的定义生成一个version.rc文件,我将其编译到库中,然后在我的dll文件的属性窗口中正确显示.
现在我也想在我的c ++源代码中使用这个CMake变量,但实际上我没有找到一个有效的解决方案.我尝试过不同的东西:
#ifndef VERSION_LIBINTERFACE
# define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
#endif
Run Code Online (Sandbox Code Playgroud)
或这个:
unsigned int getLibInterfaceVersion()
{
return @LIBINTERFACE_VERSION@;
}
Run Code Online (Sandbox Code Playgroud)
但是编译器不会接受任何东西.由于我对CMake-Documentation的研究没有得到任何结果,我希望有人可以给我基本的建议.
提前致谢.
And*_*dré 56
最简单的方法是使用add_definition将LIBINTERFACE_VERSION作为定义传递:
add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )
Run Code Online (Sandbox Code Playgroud)
但是,您也可以创建"头文件模板"并使用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
Run Code Online (Sandbox Code Playgroud)
然后在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...
Run Code Online (Sandbox Code Playgroud)
当然,请确保源文件中包含正确的version_config.h.