CMake executing_process with bash pipeline



在我的CMakeLists.txt中,我需要执行位于/include/ff下的mapping_string.sh脚本。这个脚本需要用户键入";y";以便继续。

我尝试了这种方法,但我只得到了";mapping_string.sh";一串

execute_process(
COMMAND yes | bash mapping_string.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/include/ff
RESULT_VARIABLE FF_MS_RES
)

带有bash管道

即管道是Bash的一部分,您必须运行Bash,而不是其他东西。

execute_process(
COMMAND bash -c "yes | bash mapping_string.sh"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/include/ff
RESULT_VARIABLE FF_MS_RES
)

请务必阅读CMake中的报价https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#quoted-论点。

使用execute_process命令中内置的功能,而不是管道:

命令作为管道同时执行,每个进程的标准输出通过管道连接到下一个进程的标准输入。所有进程都使用一个标准错误管道。

execute_process(
COMMAND yes
COMMAND bash mapping_string.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/include/ff
RESULT_VARIABLE FF_MS_RES
)

最新更新