【发布时间】:2020-01-14 03:24:05
【问题描述】:
假设我们要在 CMake add_custom_command 中运行以下命令:
echo "#define FOO \"$(sh tools/foo.sh)\"" > foo.h
foo.sh 是别人维护的脚本,所以在这里我们无法轻易更改。
问题是,CMake 不会评估 \"$(sh tools/foo.sh)\"' inadd_costom_command`,而是直接将它们复制到 foo.h 中,这显然不是我们想要的。
在生成的 build.make 中我发现了类似的内容:
echo "#define FOO \"\$$(sh tools/foo.sh)\"" > .../foo.h
CMake add_custom_command COMMAND 的转义规则是什么?
add_custom_commandCOMMAND中的命令应该怎么写?
【问题讨论】:
-
COMMAND echo "#define FOO \"$(sh tools/foo.sh)\"" > foo.h?你试过什么?它奏效了吗?我会把它一分为二COMMAND printf "#define FOO" > foo.h COMMAND sh tools/foo.sh >> foo.h似乎更易读。 -
@KamilCuk 已编辑
-
What'are the escape rules了解VERBATIM。您是否将VERBATIM传递给add_custom_command?无论如何,正确的方法是自己生成一个 shell。像COMMAND sh -c '"{ echo \"#define FOO\"; sh tools/foo.sh; } > foo.h"一样,或者如果你必须COMMAND sh -c "echo \"#define FOO \\\"$(sh tools/foo.sh)\\\"\" > foo.h"但那会转义。 -
@KamilCuk 谢谢。是的,我用
VERBATIM打电话给add_custom_command。