逐步将 gcov 与 CMake 结合使用
Using gcov with CMake step by step
我正在尝试 运行 gcov 我正在处理的项目,使用 this guide。
我按照指南上的说明阅读了很多帖子,包括本网站上的 detailed guide。
但我做不到。
我遵循的步骤是:
我项目的主要 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)
希望对您有所帮助!
我正在尝试 运行 gcov 我正在处理的项目,使用 this guide。
我按照指南上的说明阅读了很多帖子,包括本网站上的 detailed guide。
但我做不到。
我遵循的步骤是:
我项目的主要
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)
希望对您有所帮助!