【发布时间】:2019-12-23 18:54:47
【问题描述】:
我目前正在将我们当前的构建环境从 MSBuild 迁移到 CMake。我有一种情况,我需要更新 PATH 变量才能运行单元测试可执行文件。这对gtest_add_tests 来说不是问题,因为它使用源代码来识别测试。但是gtest_discover_tests(它使用--gtest_list_tests 标志执行单元测试)无法识别任何测试,因为在构建期间遇到STATUS_DLL_NOT_FOUND 错误。
例如:
add_executable(gTestExe ...)
target_include_directories(gTestExe ...)
target_compile_definitions(gTestExe ...)
target_link_libraries(gTestExe ...)
set (NEWPATH "/path/to/bin;$ENV{PATH}")
STRING(REPLACE ";" "\\;" NEWPATH "${NEWPATH}")
这行得通:
gtest_add_tests(TARGET gTestExe TEST_LIST allTests)
set_tests_properties(${all_tests} PROPERTIES ENVIRONMENT "PATH=${NEWPATH}")
但这不是:
#set_target_properties(gTestExe PROPERTIES ENVIRONMENT "PATH=${NEWPATH}")
#set_property(DIRECTORY PROPERTY ENVIRONMENT "PATH=${NEWPATH}")
gtest_discover_tests(gTestExe PROPERTIES ENVIRONMENT "PATH=${NEWPATH}")
编辑:
使用gtest_add_tests 添加时,测试本身可以工作。问题是在gtest_discover_tests 注册的后期构建步骤中发现测试的调用失败,因为所需的库不在PATH 中。
【问题讨论】:
-
测试本身是否因为缺少 DLL 依赖关系而无法构建?如果是这样的话,你见过这个answer吗?
-
@squareskittles 我编辑以试图解决我看到的问题。测试正在构建中,失败的是测试发现步骤。虽然,我相信该链接中描述的一些解决方案可以工作(例如复制 dll)。
-
好的,如果您找到适合您的解决方案或解决方法,请发布答案。
标签: cmake googletest