直接传递编译选项(绕过CMakeLists.txt)

时间:2018-09-26 03:52:08

标签: c++ c cmake

给出代码

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仅包含cmakecmake -DMY_DEFINE=0

1 个答案:

答案 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)