windows - 在Windows上使用带有--coverage的clang构建应用程序

标签 windows cmake clang code-coverage

我正在尝试构建一个简单的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")

一切正常...但这真的是我的问题的解决方案吗?

最佳答案

根据这些NotesNotes以及简单example和另一个example,您需要不同地执行此操作。

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链接,它将根据需要链接到配置文件库中。

关于windows - 在Windows上使用带有--coverage的clang构建应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53599351/

相关文章:

c++ - 如何通过cmake使用-fPIC编译jsoncpp

C++17 编译器不应该发现对未定义值的引用传递吗?

linux - Windows 电脑上的 Git Bash 和 Linux 有什么关系?

windows - 线程本地存储/Windows

c++ - 在现代 CMake 中设置全局选项?

C++ CMake 项目 : Recipe for target 'main_app' failed

c++ - Ubuntu 20.04 上 boost-thread 的 Clang 10 链接错误

c++ - 列表初始化期间临时对象的生命周期

windows - 无法创建数据目录 - Google Chrome 无法读取和写入其数据目录 - Cordova

Windows 检查字符串包含另一个不起作用