繁体   English   中英

CMAKE为C ++编译器添加gcov选项

[英]CMAKE adding gcov options for C++ compiler

我需要调试流,从而使用cmake / mingw64 C ++编译器编译其代码。 我了解如果对每个源代码文件使用-fprofile-arcs -ftest-coverage进行编译-我将获得调试流程执行详细信息,从而帮助我理解和修复流程。 所以我在我的CMakelists.txt文件中添加了以下CMAKE选项,但随后我提到了错误:

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS    "-fprofile-arcs -fprofile-generate -lgcov --coverage")
add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
SET( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )

建立期间发生错误-连结:

[76/150] Linking CXX executable test.exe
FAILED: test.exe
cmd.exe /C "cd . && C:\tools\mingw64\bin\c++.exe -DGSL_THROW_ON_CONTRACT_VIOLATION -Wall -ftrack-macro-expansion=0 -Werror -std=gnu++14 -D _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING -Og -g3   test.cpp.obj testhelp.cpp.obj  -o test.exe -Wl,--out-implib,test.dll.a -Wl,--major-image-version,0,--minor-image-version,0  ext/googletest/build/googlemock/libgmock_main.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
test/case/TestArgs.cpp.obj: In function `_GLOBAL__sub_I_65535_0__ZN2cc5shell30TestCommandArguments_Size_Test10test_info_E':
:(.data+0x2ee0): undefined reference to `__gcov_merge_add'
In function `_GLOBAL__sub_I_65535_0__ZN2cc5shell58TestArgumentCompletion_arg_root_2_subgroups_empty_arg_Test10test_info_E':
: undefined reference to `__gcov_init'
: undefined reference to `__gcov_merge_add'

我尝试了各种方法来解决它-但这没有帮助吗?

链接器选项-lgcov实际上是 “ gcov” 链接的 ,因此最好将其标记为:

link_libraries(gcov)

之间差CMAKE_EXE_LINKER_FLAGS变量和link_libraries / target_link_libraries命令是变量增加连接标志的对象文件之前的链接的命令行,但命令对象文件添加连接标志。 当库和目标文件的错误顺序给出undefined reference错误时,这种区别对于符号解析至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM