给出代码
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
?
答案 0 :(得分: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 documentation。
您还可以使用CMake option
命令公开可用选项。
在您的情况下,应该是:
option(MY_DEFINE "This configures whether you print HERE or THERE" OFF)