对于构建应用程序,我使用CMake。 我在具有多个变量的脚本中解析CMake命令:
CMAKE_COMMAND=" \
$CMAKE \
-G "$Build_TOOL_CMAKE" \
[...]"
解析该命令后,我用printf
打印该命令以进行控制:
printf "\n${CMAKE_COMMAND}\n"
然后我最终使用以下命令执行命令:
$CMAKE_COMMAND
只要我将“忍者”用作生成器(-G
-> BUILD_TOOL_CMAKE="Ninja"
),该脚本就起作用了,因为其中没有空格字符。
现在,我想使用“ Eclipse CDT4-Unix Makefiles”作为生成器。我尝试了几种转义空格字符的方法,例如:
CMAKE_COMMAND=" \
$CMAKE \
-G \"$Build_TOOL_CMAKE\" \
[...]"
或
CMAKE_COMMAND=" \
$CMAKE \
-G '$Build_TOOL_CMAKE' \
[...]"
在某些情况下,打印的命令变得正确,但是执行该命令会导致诸如以下的错误:
CMake错误:无法创建命名生成器Eclipse
或
CMake错误:无法创建命名生成器“ Eclipse
这导致人们认为转义空格有问题,但是printf
可以起作用:
cmake.exe -G"Eclipse CDT4 - Unix Makefiles" -S sourcefolder -B buildfolder # printf $CMAKE_COMMAND
我错过了什么吗?也许仅通过变量($CMAKE_COMMAND
)执行也是错误的方法。
答案 0 :(得分:1)
您可以使用CMake的configure_file
命令:documentation
将所有变量放在command.in
中并将其写入command
。
configure_file(command.in, command)
文件command.in
如下所示:
${CMAKE_COMMAND} -G ${Build_TOOL_CMAKE}