我使用这个CMake是为了在配置阶段运行一个跨平台的shell脚本:
find_program(BASH_EXECUTABLE bash
NAMES bash git-bash
HINTS
"C:/Program Files/Git/bin"
REQUIRED
)
execute_process (
COMMAND ${BASH_EXECUTABLE} "exit1.sh"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND_ERROR_IS_FATAL ANY
OUTPUT_VARIABLE RESULTSV_OUT
ERROR_VARIABLE RESULTSV_ERR
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE
RESULT_VARIABLE RESULTSV_VARY
)
message("MESSAGE OUTPUT IS ${RESULTSV_OUT}" )
message("MESSAGE ERROR IS ${RESULTSV_ERR}" )
message("MESSAGE RESULTS IS ${RESULTSV_VARY}" )
结果总是:
1> [CMake] MESSAGE OUTPUT IS
1> [CMake] MESSAGE ERROR IS
1> [CMake] MESSAGE RESULTS IS 0
尽管exit1.sh只是一个文件
#!/usr/bin/bash
exit 1
命令确实运行了,我已经能够用更大的脚本来确认它。它在一个新的bash窗口中运行,但我不明白为什么CMake无法从bash获得这个退出代码。COMMAND_ERROR_IS_FATAL
似乎也无法识别命令失败。
1条答案
按热度按时间zpqajqem1#
我相信
git-bash.exe
是Git Bash的终端模拟器 Package 器(它启动一个Mintty终端,并将Git-Bash的Bash作为shell)。请参见https://superuser.com/q/1104567/1749748。请注意,您可能必须在更改后重新配置构建系统/使用新的CMake缓存重新配置构建系统,因为
find_program
默认情况下会缓存它找到的结果(或者您可以使用NO_CACHE
关闭其缓存,但请阅读the docs中的警告标签,了解您可能不想这样做的原因(性能原因))。