在CMake文件中执行bash命令

37
我不太明白CMake的使用。我想在构建过程中执行以下bash命令:
date +"%F %T" > timestamp 它获取当前日期并将其写入文件。然而,我似乎无法使用CMake命令来复制这个简单的操作。
我尝试了以下几个方法:
execute_process(COMMAND "date +'%F %T' > timestamp")
add_custom_command(OUTPUT timestamp COMMAND date +"%F %T")
file(WRITE timestamp date +"%F %T")
但都没有起作用。我几乎怀疑它们是否被执行了。
由于我对CMake及其语法知识有限,因此我的做法可能是错误的。希望有人能指点迷津。谢谢!

1
你不能在那里使用 >... http://stackoverflow.com/a/31523634/2836621 - Mark Setchell
2个回答

40

我认为我的主要问题是没有在我的命令参数周围加上引号。同时,感谢@Mark Setchell让我意识到我应该使用OUTPUT_VARIABLE而不是OUTPUT

无论如何,这是我得出的答案:

execute_process (
    COMMAND bash -c "date +'%F %T'"
    OUTPUT_VARIABLE outVar
)

这将bash命令的输出存储到变量 outVar 中。

file(WRITE "datestamp" "${outVar}")

这会将outVar的内容写入名为“datestamp”的文件中。


13
注意 - 使用 bash -c 也会在变量末尾添加一个新行符,这将导致 make 根据你的使用方式而发出抱怨
build.make: *** 缺少分隔符。 停止。
这应该解决上述问题。
execute_process(COMMAND  which grpc_cpp_plugin OUTPUT_VARIABLE GRPC_CPP_PLUGIN)
string(STRIP ${GRPC_CPP_PLUGIN} GRPC_CPP_PLUGIN)
message(STATUS "MY_VAR=${GRPC_CPP_PLUGIN}")

这非常重要,否则您肯定会遇到*build.make: *** missing separator. Stop.*,因为将附加换行符。 - Zstack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接