【问题标题】:cmake adds redundant quotation marks for external projectscmake 为外部项目添加多余的引号
【发布时间】:2023-02-15 05:13:57
【问题描述】:

作为更大的 cmake 构建的一部分,我有一个外部项目。创建自定义构建命令来构建软件的这一部分。

我想在引号中传递标志。但是,cmake 一直在我不想要的地方用引号括起我的代码。以下面的例子为例:

include(ExternalProject)
set(bar "echo;cxxflags=\"flag1 flag2\"")
ExternalProject_Add(test
    PREFIX ""
    DOWNLOAD_COMMAND ""
    COMMAND "${bar}"
    TEST ""
    )

当我跑步时

export VERBOSE=1
cmake ..
make

我将 cxxflags 参数用引号括起来,这对我的目的不可用。

...
cd /some/path && echo "cxxflags=\"flag1 flag2\""
...

如果我使用以下 CMakeLists.txt,整个命令都包含在引号中并且不会执行。

include(ExternalProject)
set(bar "echo;cxxflags=\"flag1 flag2\"")
string(REPLACE ";" " " barcmd "${bar}")
ExternalProject_Add(test
    PREFIX ""
    DOWNLOAD_COMMAND ""
    COMMAND ${barcmd}
    TEST ""
    )

整个命令是用引号引起来的:

...
cd /some/path && "echo cxxflags=\"flag1 flag2\""
...

我需要的是像

cd /some/path && echo cxxflags=\"flag1 flag2\"

当我的论点不包含任何引号时,第一种方法工作正常,即

include(ExternalProject)
set(bar "echo;cxxflags=flag1)
ExternalProject_Add(test
    PREFIX ""
    DOWNLOAD_COMMAND ""
    COMMAND "${bar}"
    TEST ""
    )

按预期工作并输出

cd /some/path && echo cxxflags=flag1

【问题讨论】:

    标签: cmake external quotes


    【解决方案1】:

    使用 cmake 构建 boost 库时出现问题。没有合适的解决办法。 Kitware 开发人员建议用引号将整个论点括起来,并且在论点本身内不要引号。 The call is written to a script file, which is invoked by cmake.

    这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多