CMake:运行ctest时可执行文件崩溃

时间:2016-01-14 16:24:45

标签: c++ cmake ctest

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

  

$ {CMAKE_SOURCE_DIR} / 64 / $ {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的目录中。如何更改它?

1 个答案:

答案 0 :(得分:0)

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

 add_test([test_name]  [test exe path])

它没有处理工作目录。

另一个explained here确实包含了显式设置工作目录的参数。

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

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

它解决了这个问题。