- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在设置执行 MSYS2 bash 命令的 CMake external_process() 命令时遇到问题。当我在 MSYS2 shell 中时,如果我运行命令 $ bash -v ./bootstrap.sh
该命令可以正常工作。但是,如果我使用 $ cmake -P Run_bash_command.cmake
在 MSYS2 shell 中运行 CMake 脚本,则命令会在整个过程中出错。我在 CMake Documentation 中找到的一条重要信息让我觉得我没有正确调用 bash 或缺少环境变量:
CMake executes the child process using operating system APIs directly. All arguments are passed VERBATIM to the child process. No intermediate shell is used, so shell operators such as > are treated as normal arguments.
如果可能的话,我希望能够使用 CMake 执行此命令,因为这个问题是一个更大的 CMake super 构建项目的一部分。如果有另一种解决问题的方法,我愿意接受建议,只要我可以将它包含在 superbuild 项目的自动化中。任何帮助将不胜感激。
SET( ENV{MSYSTEM} MINGW64 )
SET( DIR_CONTAINING_BOOTSTRAP_SH C:/bash_test )
SET( BASH_COMMAND_TO_RUN bash -v ./bootstrap.sh )
EXECUTE_PROCESS( COMMAND ${BASH_COMMAND_TO_RUN}
WORKING_DIRECTORY ${DIR_CONTAINING_BOOTSTRAP_SH} RESULT_VARIABLE command_result )
IF( NOT "${command_result}" STREQUAL "0" )
MESSAGE( FATAL_ERROR "Error: command_result='${command_result}'" )
ENDIF()
pacman -S base-devel git mingw-w64-x86_64-cmake mingw-w64-x86_64-toolchain
$ bash -v ./bootstrap.sh
输出:$ bash -v ./bootstrap.sh
#!/bin/sh
if ! test -d m4 ; then
mkdir m4
fi
autoreconf -ivf || exit 1
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh''
...<clipped output due to length>...
configure.ac:29: installing './install-sh'
configure.ac:29: installing './missing'
examples/Makefile.am: installing './depcomp'
autoreconf: Leaving directory `.'
$ cmake -P Run_bash_command.cmake
输出:$ cmake -P Run_bash_command.cmake
#!/bin/sh
if ! test -d m4 ; then
mkdir m4
fi
autoreconf -ivf || exit 1
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
aclocal-1.15: error: aclocal: file '/msys64/usr/share/aclocal/xsize.m4' does not exist
autoreconf: aclocal failed with exit status: 1
CMake Error at Run_bash_command.cmake:10 (MESSAGE):
Error: command_result='1'
bash -l -c
但这会导致 shell 默认到主目录,然后无法找到文件 bootstrap.shsh
代替 bash
autoreconf -ivf
,出现同样的问题最佳答案
我能够使用下面的代码解决问题。
SET( DIR_CONTAINING_BOOTSTRAP_SH /C/bash_test )
SET( BASH_COMMAND_TO_RUN bash -l -c "cd ${DIR_CONTAINING_BOOTSTRAP_SH} && sh ./bootstrap.sh" )
EXECUTE_PROCESS( COMMAND ${BASH_COMMAND_TO_RUN}
WORKING_DIRECTORY ${DIR_CONTAINING_BOOTSTRAP_SH} RESULT_VARIABLE command_result )
IF( NOT "${command_result}" STREQUAL "0" )
MESSAGE( FATAL_ERROR "Error: command_result='${command_result}'" )
ENDIF()
bash -l
导致 shell 默认为主目录,为了解决这个问题,我添加了一个更改目录 cd <path>
命令让我们回到我们想要发出 bash 命令的目录。-c
使 bash 从字符串中读取命令。由于我们要发出两条命令,一条用于更改目录,一条用于运行 shell 脚本,因此我们需要使用 &&
将命令链接在一起并使用“引号”以确保将整个命令正确读取为字符串。关于bash - 如何使用 CMake execute_process() 正确调用 MSYS2 Bash 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667326/
我有一个项目,我正在使用 cmake 来帮助构建。假设项目在 /home/proj 中,构建目录在 /home/proj-build /home/proj 目录是一个带有一些标签的 git 存储库,我
我有一个 CMake 脚本,它创建一个命令字符串并使用 execute_process 运行它。但是,有些参数没有正确填写。有没有办法打印正在执行的实际命令字符串? 它上面有一个 message 调用
我正在运行一些耗时的 bash 脚本: execute_process( COMMAND "bash" "slow_script.sh" WORKING_DIRECTORY ${INS
我最近在使用 cmake 时遇到了一个非常有趣的问题。问题如下: 我有一个 CMakeLists.txt,它定义了一个相当简单的项目。我希望能够在构建项目时设置一个 linux 环境变量。为此,我想调
我有一个使用 CMake 的项目,我通过以下方式获取当前的 git 哈希: if(EXISTS "${CMAKE_SOURCE_DIR}/.git") execute_process(
我有以下在 WORKING_DIRECTORY 中运行 COMMAND 的 CMake 片段。我尝试了不同的方法来传递环境变量 (MBEDTLS_INCLUDE_DIR=${CMAKE_CURRENT
我想在 execute_process 的子目录中执行 CMake 命令,并将一些缓存变量作为 -D 传递选项。 如果变量是字符串类型,它就可以工作。但是,如果变量是列表,则 typical meth
在Linux计算机上,从cmake项目中,我试图使用execute_process调用git,以便可以将源代码控制中的信息包含到我的应用程序中。 我创建了一个小测试来尝试打印git版本: cmake_
CMake的execute_process command 似乎只让您执行一个进程 - 而不是您可以提供命令 shell 的任意行。问题是,我想使用管道、文件描述符重定向等 - 而这似乎是不可能的。另
我目前对 CMake 感到精神崩溃。首先让我向您展示一下我在做什么: FILE( GLOB_RECURSE FLATBUFFER_SRC "*.fbs" ) STRING( REPLACE ";" "
我使用 CMake install(DIRECTORIES...) 形式在安装时复制 header : install(DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}
问题描述 我在设置执行 MSYS2 bash 命令的 CMake external_process() 命令时遇到问题。当我在 MSYS2 shell 中时,如果我运行命令 $ bash -v ./b
我想调用命令 find来自 execute_process . find 命令的格式是: find [/v] [/c] [/n] [/i] [/off[line]] "" [[:][][...]] 因
我在 cmake 中使用 execute_process() 函数。 message(" FLAGS = ${FLAGS}") message(" SCATTERFILE = ${SCATTERFIL
我是一名优秀的程序员,十分优秀!