【发布时间】: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
【问题讨论】: