也许我错过了一些明显的东西,但我似乎无法弄清楚如何显式设置可以通过启动的进程看到的环境变量add_custom_target().
我尝试了以下方法:
set(ENV{PATH} "C:/Some/Path;$ENV{PATH}")
add_custom_target(newtarget somecommand)
Run Code Online (Sandbox Code Playgroud)
不幸的是,%PATH%环境变量似乎没有变化somecommand.(我已经设置了一个Gist,可以在这里重现问题.)
我究竟做错了什么?
根据CMake文档
https://cmake.org/cmake/help/v3.3/command/set.html
一个人可以做
set(ENV{<variable>} <value>)
Run Code Online (Sandbox Code Playgroud)
但这给出了结果
set(ENV{FOO} foo)
message("variable is $ENV{FOO}")
Run Code Online (Sandbox Code Playgroud)
在配置时
variable is foo
Run Code Online (Sandbox Code Playgroud)
但是在Linux命令中
echo $FOO
Run Code Online (Sandbox Code Playgroud)
该变量未设置。
编辑:
这是问题的部分解决方案,即设置$PATH,以便用户CMAKE_INSTALL_PREFIX首先列出
set(file_sh ${CMAKE_CURRENT_BINARY_DIR}/path.sh)
set(path "${CMAKE_INSTALL_PREFIX}:$ENV{PATH}")
file(WRITE ${file_sh} "#!/usr/bin/env bash\n")
file(APPEND ${file_sh} "export PATH=\"${path}\"")
execute_process(COMMAND chmod a+x ${file_sh} RESULT_VARIABLE res)
Run Code Online (Sandbox Code Playgroud)
这会创建这个文件
#!/usr/bin/env bash
export PATH="/install/prefix/path:/other/path"
Run Code Online (Sandbox Code Playgroud)
稍后可以在 bash 终端上执行
source path.sh
Run Code Online (Sandbox Code Playgroud)