CMake:如何指定ctest应该查找可执行文件的目录?

时间:2017-05-15 14:24:08

标签: c++ cmake googletest ctest

我想将ctest集成到c ++ / c项目中。我使用谷歌测试来编写单元测试。

我的CMakeLists.txt的相关部分如下所示:

<User version="5.1.0.1" ... (omitted for brevity) >
  <Login usewinLogin="true" passwordNeverExpires="false" />
  <Misc />
  <AdditionalInfo />
  <OutOfOfficeSettings isOutOfOffice="false" startDateTime="0001-01-01T00:00:00.0000000Z" />
  <RegionalSettings language="de" culture="de" />
</User>`

如您所见,我指定了可执行文件的输出目录(UNIT_TEST_BIN_OUTPUT_DIR)。

当我使用终端时,可执行文件可以正常工作:

...
####### CREATING EXE #######
add_executable(test_exe main.cpp test.cpp)
target_link_libraries(test_exe GTest::GTest GTest::Main)
set_target_properties (test_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${UNIT_TEST_BIN_OUTPUT_DIR})
add_test(test_exe test_exe)

我想用ctest来执行我的测试。所以我去了cmake生成的“ctest文件夹”。在这里,我想使用ctest来执行cmake中“add_test”添加的所有测试。

cd <UNIT_TEST_BIN_OUTPUT_DIR>
./test_exe

如果我将“test_exe”放在其中一个显示的路径中,它可以正常工作。但我不希望他们在那里。

我的问题:

有没有办法告诉ctest它应该在user@user:~/<dir to cmake>/cmake/unit_tests$ ctest Test project /<dir to cmake>/cmake/unit_tests Start 1: test_exe Could not find executable test_exe Looked in the following places: test_exe test_exe Release/test_exe Release/test_exe Debug/test_exe Debug/test_exe MinSizeRel/test_exe MinSizeRel/test_exe RelWithDebInfo/test_exe RelWithDebInfo/test_exe Deployment/test_exe Deployment/test_exe Development/test_exe Development/test_exe Unable to find executable: test_exe 1/1 Test #1: test_exe ......***Not Run 0.00 sec 0% tests passed, 1 tests failed out of 1 Total Test time (real) = 0.00 sec The following tests FAILED: 1 - test_exe (Not Run) Errors while running CTest 查找才能找到可执行文件?

3 个答案:

答案 0 :(得分:7)

使用 CMake 3.20 及更高版本,您可以使用 CLI option 告诉 CTest 哪个目录包含您的测试:

ctest --test-dir /path/to/your/tests

这是针对现有测试的侵入性较小的解决方案,您不想修改 CMake 文件。

答案 1 :(得分:5)

m2 <- metaprop(4:1, c(10, 20, 30, 40), sm="PFT") summary(m2) ################### Number of studies combined: k = 4 proportion 95%-CI z p-value Fixed effect model 0.0775 [0.0272; 0.1449] -- -- Random effects model 0.1093 [0.0138; 0.2589] -- -- Quantifying heterogeneity: tau^2 = 0.0229; H = 1.78 [1.05; 3.04]; I^2 = 68.6% [9.1%; 89.2%] Test of heterogeneity: Q d.f. p-value 9.56 3 0.0227 Details on meta-analytical method: - Inverse variance method - DerSimonian-Laird estimator for tau^2 - Freeman-Tukey double arcsine transformation - Clopper-Pearson confidence interval for individual studies ################### 的{​​{3}}为该命令的长格式指定 WORKING_DIRECTORY 选项。此选项的值用作测试运行的目录:

random.est2 <- c(m2$TE.random,m2$lower.random,m2$upper.random)
unlist(lapply(random.est2, meta:::backtransf,  sm="PFT", n=1/mean(1/m2$n)))
########
[1] 0.10932841 0.01376599 0.25889792

unlist(lapply(random.est2, meta:::asin2p,  n=1/mean(1/m2$n))) 
##########
[1] 0.10932841 0.01376599 0.25889792

如果您只是想让测试找到可执行文件,那么使用

就足够了
add_test

这是add_test(NAME test_exe COMMAND test_exe WORKING_DIRECTORY ${UNIT_TEST_BIN_OUTPUT_DIR}) 命令的长格式。在这种形式中,CMake检查COMMAND是否是目标名称,如果是,则将其替换为与该目标对应的可执行文件的绝对路径。这样可以从任何目录运行测试。

请注意,自动替换目标不适用于您使用的add_test(NAME test_exe COMMAND test_exe) 简短格式

答案 2 :(得分:0)

在我们的项目中,我们总是在调用add_test()时指定路径,例如:

add_test( ${filename}  ${CMAKE_CURRENT_BINARY_DIR}/${filename} )