也许我忽略了一些明显的东西,但是我似乎不知道如何显式地设置环境变量,这些变量可以被通过add_custom_target()
启动的进程看到。
我尝试了以下方法:
set(ENV{PATH} "C:/Some/Path;$ENV{PATH}")
add_custom_target(newtarget somecommand)
不幸的是,%PATH%
环境变量看起来未更改为somecommand
(我设置了一个Gist,它重现了here问题)。
我哪里做错了?
也许我忽略了一些明显的东西,但是我似乎不知道如何显式地设置环境变量,这些变量可以被通过add_custom_target()
启动的进程看到。
我尝试了以下方法:
set(ENV{PATH} "C:/Some/Path;$ENV{PATH}")
add_custom_target(newtarget somecommand)
不幸的是,%PATH%
环境变量看起来未更改为somecommand
(我设置了一个Gist,它重现了here问题)。
我哪里做错了?
4条答案
按热度按时间ssgvzors1#
为自定义目标设置环境变量的一种可移植方法是使用CMake的命令行工具模式命令
env
:在修改的环境中运行命令。
例如:
另请参见命令行工具模式。
xggvc2p62#
您在 * configuration * 步骤中设置了环境变量,但在 * build * 步骤中执行了为
add_custom_target
指定的命令。另请参见CMake常见问题解答:如何获取或设置环境变量?[...]
CMakeLists.txt中的环境变量
SET
* 仅 * 对cmake本身有效(* configure-time ),因此不能使用此方法设置自定义命令可能需要的环境变量( build-time *).禁止各种CMake命令支持的环境变量(例如,add_custom_command()
,目前尚不支持),可接受的解决方案可能是调用 shell 脚本,而 shell 脚本 Package 要执行的命令。目前
add_custom_target
(和其他命令,定义构建步骤的操作,例如add_custom_command
)不支持简单设置环境变量。如this bugreport中所建议,在Linux上,对于设置变量的值 * 不带空格 *,您可以在命令前面添加"VAR = VAL"子句。对于一般情况,您可以准备 * wrapper * 脚本,用于设置环境并运行实际命令:在Windows上:
在Linux上:
如果变量的值取决于配置,可以使用
configure_file
配置 Package 器脚本。如@sakra所述,
cmake
可执行文件的env
工具模式可用作 Package 器脚本:这种方式从CMake 3.2开始可用。
ccrfmcuu3#
这是一个迟来的答案,但也许它会帮助一些人。我们在Windows上的cmake文件中使用&&操作符来做这件事。
注意,你不能在&&之前有空格(原因我不完全理解).而且,空格在这里处理起来真实的痛苦,所以我不知道我是否正确的c:\some\path是否有空格.如果你的原始路径有空格,它确实有效.
vom3gejh4#
命令对我有效