CMake使用混合Shell脚本运行自定义命令

时间:2020-01-14 03:24:05

标签: linux bash shell cmake

假设我们要在CMake add_custom_command中运行以下命令:

echo "#define FOO \"$(sh tools/foo.sh)\"" > foo.h

foo.sh 是由其他人维护的脚本,因此我们在此处无法轻松进行更改。

问题是,CMake不会评估\"$(sh tools/foo.sh)\"' in add_costom_command`,而是直接将它们复制到 foo.h 中,这显然不是我们想要的。

在生成的 build.make 中,我发现了类似的内容:

echo "#define FOO \"\$$(sh tools/foo.sh)\"" > .../foo.h

CMake add_custom_command COMMAND的转义规则是什么?

如何在add_custom_command COMMAND中编写命令?

1 个答案:

答案 0 :(得分:0)

CMake语法太疯狂了,要实现这种转义(涉及)并不容易。要变通解决此问题,建议您将shell命令放在项目目录中的单独文件中(例如helper.sh),然后按以下方式调用它-

add_custom_command(
  ...
  COMMAND bash ${PROJECT_SOURCE_DIR}/helper.sh > foo.h
)