[英]Building an application with clang with --coverage on windows
我正在尝试构建一个简单的cmake应用程序,以测试Windows中clang提供的覆盖功能(在linux中一切正常)。
环境是:正在使用的Clang版本:7.0,并且将LLVM工具集与Visual Studio 2017生成工具cmake 3.12配合使用忍者生成器
我正在做的事情很简单:CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
project(test)
add_compile_options(--coverage)
add_executable(${PROJECT_NAME}
main.cpp
)
main.cpp非常简单:
#include <iostream>
#include <string>
int main(int argc, char const *argv[]) {
std::cout << "\ndone.\n";
return 0;
}
使用构建工具环境vcvarsall.bat,我初始化环境以使用clang运行和编译,如下所示:
mkdir build
cd build
cmake -GNinja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_LINKER=lld-link ..
cmake --build .
并且出现以下错误:
lld-link.exe: error: undefined symbol: __llvm_profile_runtime
>>> referenced by src\app\CMakeFiles\app.dir\main.cpp.obj:(__llvm_profile_runtime_user)
lld-link.exe: error: undefined symbol: __llvm_profile_register_function
>>> referenced by src\app\CMakeFiles\app.dir\main.cpp.obj:(__llvm_profile_register_functions)
>>> referenced by src\app\CMakeFiles\app.dir\main.cpp.obj:(__llvm_profile_register_functions)
我做错了什么或需要链接到什么?
谢谢
更新:使用Fred输入,我意识到应该链接到哪个库,如果添加以下内容:
link_libraries("C:/Program Files/LLVM/lib/clang/7.0.0/lib/windows/clang_rt.profile-x86_64.lib")
一切正常...但这真的是我的问题的解决方案吗?
根据这些Notes and Notes和简单示例以及另一个示例,您需要以不同的方式执行此操作。
target_compile_options(${PROJECT_NAME} PRIVATE -fprofile-instr-generate -fcoverage-mapping)
target_link_libraries(${PROJECT_NAME} PRIVATE -fprofile-instr-generate -fcoverage-mapping)
我没有测试语法或任何东西。 据我了解,-- --coverage
是使gcov
兼容数据的较早标志。 LLVM文档在编译和链接命令中给出了-fprofile-instr-generate -fcoverage-mapping
的示例,而没有--coverage
文档。 一个示例说您需要与--coverage
链接,另一个示例说您需要与-fprofile-instr-generate -fcoverage-mapping
链接,它将根据需要链接到配置文件库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.