Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake:运行ctest时可执行文件崩溃_C++_Cmake_Ctest - Fatal编程技术网

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

C++ CMake:运行ctest时可执行文件崩溃,c++,cmake,ctest,C++,Cmake,Ctest,我正在为MSVC++项目配置Windows上的CMake build project。它可以生成可执行文件,然后将其安装到定义的目录中。在我的情况下,这是: ${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE}/ 可执行文件与启动时加载的文件位于同一目录中。如果我手动启动.exe,它将打开并运行正常。但我希望通过ctest执行此操作。 我对ctest的定义如下: add_test(ENGINE_TEST1 ${CMAKE_SOURCE_DIR}/x64/${CM

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

${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的最后一个Test.log文件时,它显示它不是在“WORKING_目录”中运行测试,而是在CMake构建MyApp.exe的目录中运行。我如何更改它?

由于我不是CMake pro,我确信下面的答案不是执行测试的最佳方式,但至少对我来说是有效的。 同样,我试图在cmake安装的目录中的可执行文件上运行ctest。启动时的exe试图加载同一目录中的依赖文件。但它崩溃了,因为它无法加载这些文件。 cmake默认工作区目录似乎是生成cmake文件和项目的目录。这是“构建”目录。因此,通过ctest启动可执行文件时,它会搜索要加载的文件相对于构建目录的路径。 现在,CMAKE有两种()方法的变体。一种是带有参数的简单方法:

 add_test([test_name]  [test exe path])
它不负责工作目录

另一个是包含一个用于显式设置工作目录的参数

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

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

它解决了这个问题。

注意阅读
添加测试
:要使用工作目录选项,您需要使用NAME选项作为NAME,COMMAND-for COMMAND。简短版本的
添加测试
不接受工作目录选项。而长版本的添加测试也抱怨缺少配置,这在文档中不清楚关于如何设置。我最终通过单独设置直接工作来解决它。这将有助于其他人(例如,我)如果你发布你的解决方案。谢谢你的回答。到目前为止,我已经能够确保我的测试从生成或安装它们的目录运行,因此我不需要指定工作目录。如果/当我需要相同的功能时,我会将你的回答添加到书签。至于add_test命令的配置选项,文档指示我认为该选项允许您使用
CONFIGURATIONS Release
将测试限制为仅在使用
ctest-C Release
测试发布版本时运行,这在调试单元测试耗时过长时非常有用。