【发布时间】:2020-12-06 17:54:33
【问题描述】:
我有一个 C++ 标头,其中包含一个具有如下方法的类。可以说它是我拥有的仅标头库。
// MyHeader.hpp
#pragma once
#include <string>
namespace myheaderonlylibrary {
class MyClass {
public:
unsigned int Func1(const std::string& str) {
if (!str.empty())
return 10;
else
return 0;
}
};
}
为了测试上述方法,我将以下 gtest 源文件放在名为 unittest 的文件夹中,这与遵循的约定类似。
// MyTests.cpp
#include <limits.h>
#include "gtest/gtest.h"
#include "../MyHeader.hpp"
TEST(MyTest, Test_Something) {
myheaderonlylibrary::MyClass my_object;
unsigned int expected_value = 0;
EXPECT_EQ(expected_value, my_object.Func1(""));
}
我要做的就是使用 Cmake 构建测试并运行测试。所以,下面是我的CMakeLists.txt。
// CMakeLists.txt
cmake_minimum_required(VERSION 3.4)
set(MyheaderOnlyLibrary_HEADERS
MyHeader.hpp
)
set(MyheaderOnlyLibrary_unittest
unittest/MyTests.cpp
)
find_package(GTest REQUIRED)
enable_testing ()
add_executable(MyheaderOnlyLibraryTests ${MyheaderOnlyLibrary_unittest})
上述设置完成后,我执行cmake .. 和make 导致以下错误。
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
问题:
我不是 CMake 的专家。我的问题是,如果我只想能够运行测试,那么我应该做一个add_executable 吗?当我唯一想要的是构建和运行测试时,这是正确的方法吗?似乎调用make 时的错误是因为add_executable 正在寻找main 方法,就像在普通可执行文件中一样,它没有找到它。
构建一个只需要测试头文件的项目的正确方法是什么?
构建后如何运行测试?看起来有一个命令 CTest 来运行使用 CMake 构建的测试?
环境:
我正在使用 C++11 作为编译器的 macOS 在 macOS 上构建它。
【问题讨论】:
标签: c++ cmake gnu-make googletest