直接传递编译选项(绕过 CMakeLists.txt)
Posted
技术标签:
【中文标题】直接传递编译选项(绕过 CMakeLists.txt)【英文标题】:Pass compile options directly (bypassing CMakeLists.txt) 【发布时间】:2018-09-26 03:52:07 【问题描述】:给定代码
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
?
【问题讨论】:
【参考方案1】:您可以将configure_file
命令与#cmakedefine01
一起使用,如下所示:
(configure.h.in
的内容)
#cmakedefine01 MY_DEFINE
(在您的 CMakeLists.txt 中)
configure_file(configure.h.in configure.h @ONLY)
这将在您的构建目录中生成一个configure.h
,并设置适当的#define
。第二个例子见configure_file documentation。
您还可以使用 CMake option
命令公开可用选项。
在你的情况下,那将是:
option(MY_DEFINE "This configures whether you print HERE or THERE" OFF)
【讨论】:
以上是关于直接传递编译选项(绕过 CMakeLists.txt)的主要内容,如果未能解决你的问题,请参考以下文章