gpt4 book ai didi

python - 为 CTest 测试设置环境变量时遇到问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:00 36 4
gpt4 key购买 nike

我的任务是为基于 C++ 的项目构建 Python 绑定(bind)(使用 swig)。该项目使用 cmake 进行构建,使用 ctest 进行测试,并且应该将绑定(bind)的构建和测试集成到其中。

我已经让构建工作并且测试在手动运行时工作,但我必须设置几个环境变量才能使它们工作,而且我在为自动化过程设置这些变量时遇到了问题。

我需要设置 LD_LIBRARY_PATH 和 PYTHONPATH。 PYTHONPATH 我可以通过在测试脚本中操纵 sys.path 来绕过,但是使用 LD_LIBRARY_PATH 很难做到这一点。到目前为止,我已将以下内容添加到测试目录中的 CMakelists.txt 中:

#Python wrapper testing

find_package(PythonInterp 3.5 REQUIRED)

if (NOT PYTHONINTERP_FOUND)
message(STATUS "Python interpreter NOT found")
else(NOT PYTHONINTERP_FOUND)
message(STATUS "Python interpreter found")
ADD_TEST(NAME testPyMyproj
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_scripts/test_pyMyproj.py
)
set_property(TEST testPyMyproj PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib/)
endif (NOT PYTHONINTERP_FOUND)

我得到的错误是

ImportError: libMyproj.so: cannot open shared object file: No such file or directory

我的绑定(bind)链接到哪个库,它位于 ${CMAKE_BINARY_DIR}/lib/ 指定的目录中。

我认为这意味着 $LD_LIBRARY_PATH 设置不正确,但我不知道我做错了什么。

有没有办法在测试中检查变量的状态?谁能发现我做错了什么?

最佳答案

您可以使用 cmake -E env 命令将环境变量设置为调用测试的一部分。您可以将 add_test() 调用修改为如下所示:

ADD_TEST(NAME testPyMyproj
COMMAND ${CMAKE_COMMAND} -E env
LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:$ENV{LD_LIBRARY_PATH}
${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_scripts/test_pyMyproj.py
)

上面假设一个基于 Unix 的主机环境,但如果需要,您可以通过一些工作将其概括为支持所有平台/生成器类型。

另一种选择是使用 ENVIRONMENT应该实现基本相同的测试属性:

set_tests_properties(testPyMyproj PROPERTIES
ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:$ENV{LD_LIBRARY_PATH})

关于python - 为 CTest 测试设置环境变量时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033428/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com