我正在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的目录中。如何更改它?
答案 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}")
它解决了这个问题。