如何在c++源代码中读取CMake变量
How to read a CMake Variable in C++ source code
我想在一个地方存储库的版本号。所以我在CMake-file中定义了这样一个变量:
SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")
有了这个定义,我可以生成一个版本。根据微软的定义,我编译到库中,然后在我的dll文件的属性窗口中正确显示。
现在我想在我的c++源代码中使用这个CMake变量,但我实际上没有得到一个工作的解决方案。我试过不同的东西,像这样:
#ifndef VERSION_LIBINTERFACE
# define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
#endif
或:
unsigned int getLibInterfaceVersion()
{
return @LIBINTERFACE_VERSION@;
}
但是编译器不会接受任何东西。由于我在CMake-Documentation上的研究没有得到任何结果,我希望有人能给我一些重要的建议。
最简单的方法是将LIBINTERFACE_VERSION作为定义传递给add_definition:
add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )
但是,你也可以创建一个"头文件模板"并使用configure_file。这样,CMake将取代你的@LIBINTERFACE_VERSION@.这也更易于扩展,因为您可以轻松地在这里添加额外的定义或变量…
。创建文件"version_config.h"。,看起来像这样:
#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。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 使用CMake创建QML插件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- cmake如何在fedora工作站中找到boost静态库包
- 使用CMake检测支持的C++标准
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 在 Ubuntu 16.04 上使用 Cmake 读取C++中的文件
- CMake OpenCL:无法读取内核文件
- 使用CPP读取CSV文件,使用CMake文件编译代码
- 如何在c++源代码中读取CMake变量