如何将CMake自定义命令的输出重定向到文件?

时间:2015-07-23 08:44:05

标签: cmake

我需要用add_custom_command执行命令a捕获它的标准输出。 shell重定向到文件>不起作用,add_custom_command没有任何相关选项。我该怎么办?

2 个答案:

答案 0 :(得分:5)

(请注意,由于Florian的评论,我在调查问题后改变了我的答案。有关下面编辑的更多信息)

execute_process的文档明确指出它不使用中间shell,因此重定向操作符不能在那里工作。

add_custom_command并非如此。重定向应按预期在那里工作。 [编辑] 有时似乎不起作用的原因是CMake生成器,VERBATIM说明符和>与文件之间(缺失)空间的一些不幸组合名。

事实证明,如果确保>与大多数情况下使用的文件名之间存在空格,即使使用VERBATIM

add_custom_command(OUTPUT ${some-file}
    COMMAND cmake --version > ${some-file}
    VERBATIM # optional
)

关于替代解决方案的说明:之前我认为add_custom_command,就像execute_process不使用中间shell一样,所以我建议调用一个包含{{1}的CMake脚本运行实际命令的命令,使用execute_process选项重定向其输出。

如果出于某种原因上述解决方案仍然失败,请尝试使用ExecuteProcessWrapper.cmake

替代解决方案

答案 1 :(得分:1)

find_program(BASH bash HINTS /bin)
...
add_custom_command(
  OUTPUT
    ${some-file}
  COMMAND
    ${CMAKE_COMMAND} -E env ${BASH} -c "cmake --version > ${some-file} 2>&1"
  VERBATIM
)