为什么 CMake 会忽略源文件?

Why does CMake neglects source files?

不幸的是,我写的 CMakeLists.txt 文件只为头文件和测试脚本创建覆盖率统计信息,而不是为源文件创建覆盖率统计信息。但是,我想提供源文件的覆盖信息。我做错了什么?

例如,这是头文件:class.h

#include <string>
#include <vector>
#include <iostream>
class StrVec{
    public:
    StrVec(const std::string&);
    void print() {std::cout << vec[0] << std::endl;}

    private:
    std::vector<std::string> vec;
};

源文件是class.cpp:

#include "class.h"

StrVec::StrVec(const std::string& s): vec({s}) {}


而 "test" 文件是 main.cpp:

#include "class.h"

int main() {
    std::string s("test");
    StrVec str_vec(s);
    str_vec.print();
}

我写的CmakeLists.txt文件是:

cmake_minimum_required (VERSION 3.5)

project (StrVec)
set(LIBRARY_TARGET_NAME ${PROJECT_NAME})
SET (CMAKE_CXX_COMPILER             "/usr/bin/g++")

set(${LIBRARY_TARGET_NAME}_SRC
    class.cpp
)

set(${LIBRARY_TARGET_NAME}_HDR
    class.h
)

add_library(${LIBRARY_TARGET_NAME} SHARED ${${LIBRARY_TARGET_NAME}_SRC})
add_compile_options(--coverage -O0)

add_executable(main main.cpp)
target_link_libraries(main StrVec --coverage)

当我编译代码和运行程序时,lcov只找到main.cpp.gcda而不是class.cpp。因此,覆盖率统计信息仅包括头文件 class.hmain.cpp ,但不包括 class.cpp。如何修改 CMakeList.txt 以获得 class.cpp 的覆盖率统计信息?

我阅读了几份 cmakegcov 文件,我的印象是我特别需要请求覆盖 ​​_SRC 文件。但是,我不知道该怎么做。有人可以指出我能做什么吗?

感谢@squareskitties 的帮助,我设法解决了问题。我只是没有通过所有必需的编译选项。以下 CMakeLists.txt 有效:

c++
cmake_minimum_required (VERSION 3.5)

project (StrVec)
set(LIBRARY_TARGET_NAME ${PROJECT_NAME})
SET (CMAKE_CXX_COMPILER             "/usr/bin/g++")

set(${LIBRARY_TARGET_NAME}_SRC
    class.cpp
)

set(${LIBRARY_TARGET_NAME}_HDR
    class.h
)

add_library(${LIBRARY_TARGET_NAME} SHARED ${${LIBRARY_TARGET_NAME}_SRC})
SET(CMAKE_CXX_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage")
add_executable(main main.cpp)
target_link_libraries(main StrVec --coverage)