我在CMake
环境中构建库后,尝试从msysgit
执行脚本,以便更新PATH
。
有问题的代码行:
set(SCRIPT_DIR "${CMAKE_SOURCE_DIR}/script")
if(MINGW)
set(COMMAND "source ${SCRIPT_DIR}/mingwpath")
else()
# Other script. In this case, CMake won't enter here.
endif()
set(PATH_DIRS ${CMAKE_BINARY_DIR})
execute_process(COMMAND ${COMMAND} ${PATH_DIRS}
RESULT_VARIABLE r
OUTPUT_VARIABLE o
ERROR_VARIABLE e
)
message(STATUS ${COMMAND})
message(STATUS ${PATH_DIRS})
message(STATUS "RESULT: ${r}")
message(STATUS "OUTPUT: ${o}")
message(STATUS "ERROR: ${e}")
和脚本:
#!/bin/bash
export PATH=$1:$PATH
但我总是以这个结果结束:
source D:/test/src/script/mingwpath
D:/test/build/
RESULT: System can't find the specified file.
OUTPUT:
ERROR:
问题是如果我在终端中输入那个确切的命令,它就可以工作。
如果不是运行脚本,我会尝试运行ls
:
execute_process(COMMAND ls
RESULT_VARIABLE r
OUTPUT_VARIABLE o
ERROR_VARIABLE e
)
我得到与以前相同的输出信息。
我还删除了命令调用中的source
,最后收到了此result
消息:
%1 is not a valid Win32 application
直接从终端执行脚本。
答案 0 :(得分:0)
来自execute_command()
上的CMake docs:
CMake直接使用操作系统API执行子进程。所有参数都将VERBATIM传递给子进程。没有使用中间壳[...]
由于source
是一个内置的shell(并且cmake没有启动shell),因此无法在文件系统上找到它作为命令。所以删除"来源"声明,而是直接调用您的脚本:
set(COMMAND "${SCRIPT_DIR}/mingwpath")
警告:我在Linux上测试了这个,而不是MinGW,但是说初始症状至少是相同的。