0

我在 Windows 上为 MSVC++ 项目配置 CMake 构建项目。它构建可执行文件,然后将其安装到定义的目录中。在我的情况下是:

${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE}/

可执行文件在同一目录中有一个文件夹,其中包含在启动时加载的文件。如果我手动启动 .exe,它会打开并运行正常。但我想通过 ctest 来完成。我这样定义 ctest :

add_test(ENGINE_TEST1 ${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE}/MyApp.exe 
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE})

当我从 cmd 调用时:

ctest

可执行文件正在启动但立即崩溃并出现错误:

调试错误!

程序:../..../.../MyApp.exe

R6010 -abort() 有

被调用。

实际上,在检查 CMake 的 Last Test.log 文件时,它显示它不是在“WORKING_DIRECTORY”中运行测试,而是在 CMake 构建 MyApp.exe 的目录中运行测试。我该如何更改它?

4

1 回答 1

0

由于我不是 CMake 专业人士,我确信以下答案不是最佳方法,但至少对我有用。同样,我试图从 cmake 安装它的目录中的可执行文件上运行 ctest。启动时的 exe 试图加载位于同一目录中的依赖文件。但它崩溃了,因为它无法完成文件。看来 cmake 默认工作区目录是生成 cmake 文件和项目的目录。那是“构建”目录。因此,当通过 ctest 启动可执行文件时,它会搜索要加载的文件的相对于构建目录的路径。现在,CMAKE 有两种add_test () 方法的变体。一个很简单,带参数:

 add_test([test_name]  [test exe path])

它不处理工作目录。

这里解释的另一个 确实包含一个用于显式设置工作目录的参数。

坦率地说,我无法让这个高级功能正常工作,因为它需要提供一些我不明白如何设置的测试.config。所以我做了什么,我使用了简单的 add_test 功能。然后我使用这个将工作目录设置为我的可执行文件的位置:

 set_tests_properties(mytest PROPERTIES WORKING_DIRECTORY "${TEST_WOKRING_DIR}")

它解决了这个问题。

于 2016-01-21T12:14:30.803 回答