【问题标题】:Pass compile options directly (bypassing CMakeLists.txt)直接传递编译选项(绕过 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?

【问题讨论】:

    标签: c++ c cmake


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 2014-10-03
      • 2023-04-08
      • 2013-12-01
      • 1970-01-01
      • 2017-03-19
      • 2021-10-10
      相关资源
      最近更新 更多