c++ - C++ #define 的 CMake 命令行

标签 c++ command-line cmake

我需要通过添加编译器开关来编译某个项目的不同版本。通常我会通过使用 add_definitions 或类似的东西来做到这一点

set_property( TARGET mylib PROPERTY COMPILE_DEFINITIONS _MYDEFINE=1 )

在 CMakeLists.txt 文件中。

然而,在这个特定的项目中,我不能修改任何来源,包括 CMakeLists.txt 文件。

我希望像这样的东西

cmake -D_MYDEFINE=1 <path to sources>

会生成一个项目文件(在我的例子中是 Visual Studio 2008,但不重要),它在其预处理器定义中包含 _MYDEFINE=1,但实际上它不会。

我在这里有什么选择?是否有不同的 cmake 命令行选项来实现这一点?随意建议不包括命令行的解决方案,只要不需要更改项目的 CMakeLists.txt。

最佳答案

我现在设法做到了:

我能够说服所有人将以下几行添加到常见的 CMakeLists.txt 中:

IF (NOT DEFINED _MYDEFINE)
    SET(_MYDEFINE <default value>)
ENDIF()
ADD_DEFINITIONS(-D_MYDEFINE=${_MYDEFINE})

(不,它并不是真正的“MYDEFINE”, 只是一个占位符,我只是在这个例子中替换了所有这些)

这不会改变当前没有额外编译器标志的编译行为,因此是有效的改变。

它允许你做

cmake -D_MYDEFINE=<my value> <path to sources>

当 cmake 创建项目文件时,此 cmake 定义将映射到 C++ 预编译器定义。

关于c++ - C++ #define 的 CMake 命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531637/

相关文章:

c++ - 显式转换与隐式使用虚函数引用

c++ - 一些 const char * 在编译时不可用?

Python如何在运行脚本处理文件时传入一个可选的文件名参数

java - 安装 Apache Maven

c++ - wxWidgets 中的命令行参数

c++ - 使用 cmake 构建 tensorflow 服务客户端

MacOS - clang 地址清理程序无法链接

c++ - CMake:C 编译器标识未知

C++比较两个相似数组的长度

c++ - 如何使用模板类作为模板参数在模板类中正确定义模板函数