从CMake文件执行bash命令

时间:2016-01-28 21:32:23

标签: bash cmake

我无法理解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及其语法的了解非常有限,所以我可能做错了。我希望有人能指出我正确的方向。谢谢!

2 个答案:

答案 0 :(得分:13)

我认为我的主要问题是我的命令参数缺少引号。另外,感谢@Mark Setchell,我意识到我应该使用OUTPUT_VARIABLE来代替OUTPUT

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

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

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

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

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

答案 1 :(得分:3)

注意 - 使用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}")