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