【问题标题】:CMake executing_process with bash pipeline [duplicate]带有bash管道的CMake execution_process [重复]
【发布时间】:2022-01-16 10:50:52
【问题描述】:

在我的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
)

【问题讨论】:

  • 正如in this question 解释的那样,您需要运行 bash "-c" "your script"

标签: bash cmake


【解决方案1】:

使用 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-argument

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2016-06-26
      相关资源
      最近更新 更多