设置环境变量用于CTEST测试



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

手动运行时,我已经开始工作,测试工作正常,但是我必须设置一些环境变量才能使它们工作,并且我很难将其设置为自动化过程。

我需要设置ld_library_path和PythonPath。pythonpath我可以通过在测试脚本中操纵sys.path来解决,但这与ld_library_path更难。到目前为止

#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

这是我的绑定链接到${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})

克雷格·斯科特(Craig Scott(已经通过环境测试属性提供了一个很好的解决方案。我只想添加Visual Studio Generator和Generator Expressions在Windows上的工作方式:

set_tests_properties(
    name_of_test_one
    name_of_test_two
PROPERTIES
    # Make sure DLL is found by adding its directory to PATH
    ENVIRONMENT "PATH=$<TARGET_FILE_DIR:library_target_name>;$ENV{PATH}"
)

注意1:代替结肠,使用逃脱的半柱注2:我正在使用更灵活的$发电机表达式

最新更新