不幸的是,我编写的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}) {}
“测试”文件为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.h
和main.cpp
,但不包括{em> class.cpp
。如何修改CMakeList.txt
以获得class.cpp
的覆盖率统计信息?
我阅读了几份cmake
和gcov
文档,给人的印象是,我特别需要请求_SRC
文件的覆盖范围。但是,我不知道该怎么做。有人可以指出我可以做什么吗?
答案 0 :(得分:1)
感谢@squareskitties的帮助,我设法解决了这个问题。我只是没有通过所有必需的编译选项。以下let numb = ["84.0711 billion", "$52.6138 billion", "$43.55 billion", "$54.73 million"]
const res = []
for (let i = 0; i < numb.length; i++) {
res.push(convertNumber(numb[i]))
}
console.log(JSON.stringify(res));
//wanted output: ["84071100000", "52613800000", "43550000000", "54730000"]
function convertNumber(numb) {
var digits = numb
.match(/\d+(?:\.\d+)/g)
.map(Number)[0];
if (numb.includes('billion')) digits *= 1000000000
if (numb.includes('million')) digits *= 1000000
return digits
}
起作用了:
CMakeLists.txt