【发布时间】:2019-11-01 10:40:40
【问题描述】:
我有一个 CMake 脚本,它通过 add_test() 运行一些测试,在 CMake 3.15 的 Windows(Server 2008,不要问)下运行。当调用这些测试时,它们运行的环境中的 PYTHONPATH 环境变量似乎被重置为环境默认值,并且不包含它需要的一些路径。
因此,我需要在运行测试时将 PYTHONPATH 设置为 CMake 运行时 $ENV{PYTHONPATH} 变量的值。这有许多分号分隔的路径,所以 CMake 认为它是一个列表,并试图将其扩展为许多以空格分隔的字符串,这显然会以糟糕的方式结束。
我不知道如何阻止 CMake 这样做。从我所看到的一切来看,您应该可以用引号括起来:
add_test(
NAME mytest
COMMAND cmake -E env PYTHONPATH="$ENV{PYTHONPATH}"
run_test_here)
...但它总是进行扩展。我还尝试使用 set_tests_properties 进行设置:
set_tests_properties(mytest PROPERTIES
ENVIRONMENT PYTHONPATH="$ENV{PYTHONPATH}")
...但这似乎根本没有做任何事情 - 测试时的 PYTHONPATH 没有改变。我认为这是因为它是一个环境变量,但是通过set() 使用常规 CMake 变量没有任何区别,所以我做错了。请帮忙!
【问题讨论】:
-
你的意思是你想要
\$ENV{PYTHONPATH}? -
我想要:
cmake COMMAND cmake -E env PYTHONPATH="C:\part\of\pythonpath;C:\another\part"...但显然不是硬编码的。 -
PYTHONPATH 不应该用
:分隔吗?它不应该是分号分隔的路径,它应该是冒号分隔的路径。运行命令前COMMAND echo "$ENV{PYTHONPATH}"和message(STATUS "ENV{PYTHONPATH} = $ENV{PYTHONPATH}")的输出是什么? -
在 Linux 上确实如此。可悲的是,我坚持使用使用分号的 Windows。
-
message(STATUS "ENV{PYTHONPATH} = $ENV{PYTHONPATH}")返回它应该返回的内容(冒号分隔的路径列表,看起来像C:\Python27\Scripts;E:\JenkinsMIDEBLD\workspace\...;...。COMMAND echo "$ENV{PYTHONPATH}"返回相同的内容,但带有空格:"C:\Python27\Scripts" "E:\JenkinsMIDEBLD\workspace\..." "..."