c++ - 逐步使用 gcov 和 CMake
问题描述
我正在尝试使用本指南在我正在处理的项目上运行 gcov 。
我按照指南上的说明阅读了很多帖子,包括本网站上的详细指南。
但我不能让它工作。
我遵循的步骤是:
我项目的主要
CMakeLists.txt
内容位于一个名为cmake
. 在这个文件夹中,我创建了另一个名为的文件夹CMakeModules
并将CodeCoverage.cmake
文件放入其中。我将此代码添加到我的 CMakeLists.txt 中:
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules) if(CMAKE_COMPILER_IS_GNUCXX) include(CodeCoverage) APPEND_COVERAGE_COMPILER_FLAGS() SETUP_TARGET_FOR_COVERAGE(NAME coverage EXECUTABLE DEPENDENCIES coverage) endif()
我使用以下命令编译:
cmake -DCMAKE_BUILD_TYPE=DEBUG ../cmake # (I'm compiling from a subfolder of the master folder) make make coverage
make coverage
运行命令时出现错误:[100%] Resetting code coverage counters to zero. Processing code coverage counters and generating report. Errno architecture (x86_64-linux-thread-multi-4.6.4-301.fc24.x86_64) does not match executable architecture (x86_64-linux-thread-multi-4.12.9-300.fc26.x86_64) at /usr/lib64/perl5/Errno.pm line 11. Compilation failed in require at /usr/share/perl5/vendor_perl/File/Temp.pm line 17. BEGIN failed--compilation aborted at /usr/share/perl5/vendor_perl/File/Temp.pm line 17. Compilation failed in require at /usr/bin/lcov line 66. BEGIN failed--compilation aborted at /usr/bin/lcov line 66. CMakeFiles/coverage.dir/build.make:57: set di istruzioni per l'obiettivo "CMakeFiles/coverage" non riuscito make[3]: *** [CMakeFiles/coverage] Error 255 CMakeFiles/Makefile2:178: set di istruzioni per l'obiettivo "CMakeFiles/coverage.dir/all" non riuscito make[2]: *** [CMakeFiles/coverage.dir/all] Errore 2 CMakeFiles/Makefile2:185: set di istruzioni per l'obiettivo "CMakeFiles/coverage.dir/rule" non riuscito make[1]: *** [CMakeFiles/coverage.dir/rule] Errore 2 Makefile:214: set di istruzioni per l'obiettivo "coverage" non riuscito make: *** [coverage] Errore 2
我的问题是:
我应该在 EXECUTABLE 插槽中放入什么?启动程序的可执行文件的路径?
程序的设置可以通过我写的那一行来完成吗?
我已经尝试了该站点上其他线程的解决方案,但我无法建议我如何完成这项工作。
解决方案
该EXECUTABLE
选项应该定义如何在您的代码上运行某些东西并生成覆盖率数据。
例如,它应该是运行所有测试的指令。
如果您使用 ctest 定义了测试,请尝试以下操作:
SETUP_TARGET_FOR_COVERAGE(NAME coverage
EXECUTABLE ctest)
(或者ctest --parallel n
如果你有很多测试和不止一个处理器!)如果你有一个特定的目标来运行一些测试,那么试试类似的东西:
SETUP_TARGET_FOR_COVERAGE(NAME coverage
EXECUTABLE make target)
希望这可以帮助!
推荐阅读
- amazon-web-services - Soft memory limit for AWS ECS task defined by docker-compose.yaml
- python - Remove recursively from a BST
- vue.js - MDBootstrap vue.js 模态转换不起作用
- python - 发出请求时python中的SSL认证错误
- vba - 如果添加了签名,则获取没有签名的 Outlook 电子邮件正文 (VBA)
- vba - 无法在 ServerXMLHTTP 请求中设置自定义超时
- .htaccess - 仅在主页的 url 中删除查询字符串(htaccess)
- chromecast - With the Google Cast iOS SDK (Chromecast) is it possible to have a video with a separate audio stream?
- python-3.x - 函数 numpy.argmax() 如何处理带有数字和字符的列表
- javascript - React Application looking for static files which are not being accessed