c++ - 直接传递编译选项(绕过 CMakeLists.txt)
问题描述
给定代码
int main(int argc, char** argv)
{
#ifdef MY_DEFINE
printf("HERE\n");
#else
printf("THERE\n");
#endif
}
要切换HERE
THERE
行为,我的 `CMakeLists.txt 中需要以下内容
IF (${MY_DEFINE} MATCHES 1) # I want to remove these lines
add_compile_options(-DMY_DEFINE)
ENDIF(${MY_DEFINE} MATCHES 1) # Up to here
那么,我可以
cmake -DMY_DEFINE=1
要得到HERE
cmake -DMY_DEFINE=0
要得到THERE
这一切似乎有点多余......是否可以删除我的 CMakeLists.txt 中的那几行并且仍然能够得到
HERE
有类似的东西cmake -DMY_DEFINE=1
THERE
只是cmake
或cmake -DMY_DEFINE=0
?
解决方案
您可以像这样使用该configure_file
命令#cmakedefine01
:
(内容configure.h.in
)
#cmakedefine01 MY_DEFINE
(在你的 CMakeLists.txt 中)
configure_file(configure.h.in configure.h @ONLY)
这将configure.h
在您的构建目录中生成一个具有适当#define
设置的目录。有关第二个示例,请参见configure_file 文档。
您还可以使用 CMakeoption
命令公开可用选项。在你的情况下,那将是:
option(MY_DEFINE "This configures whether you print HERE or THERE" OFF)
推荐阅读
- angular - Angular Pipe - 选择其他选项管道过滤器时重置复选框
- unity3d - 如何将脚本统一添加到对象中?
- javascript - 我对 VScode 有疑问
- database-design - 简单支付交易的数据库设计
- c# - 尝试使用 sqlite 在 xamarin 应用程序中进行批量插入时出现异常
- c++ - 错误:“EM::EM(...)”的原型与“EM”类中的任何原型都不匹配
- java - 如何获取从最后一个元素开始的迭代器
- php - PHP数组按月分组和总和
- python - 从 github api 获取 python 文件内容并解析为 dict
- asp.net-core-mvc - 如何在 asp net core mvc 应用程序中从我的 Azure AD B2C 获取用户列表?