我正在尝试将一个普通的编译和带有gtest的单元测试集成到一个cmake文件中,但我不知道如何实现这一点。这是我的项目:
|---include
| |---Student.h
|
|---src
| |---Student.cpp
| |---main.cpp
|
|---unittest
| |---TestStudent.cpp
|
|---CMakeLists.txt # how to write this file?
因此,Student.h
、Student.cpp
和main.cpp
是源代码,TestStudent.cpp
是测试代码,其中包括gtest/gtest.h
和一个主函数,如下所示:
#include "gtest/gtest.h"
#include "Student.h"
class TestStudent : public ::testing::Test
{
protected:
Student *ps;
void SetUp() override
{
ps = new Student(2, "toto");
}
void TearDown() override
{
delete ps;
}
};
TEST_F(TestStudent, ID)
{
EXPECT_TRUE(ps->GetID() == 2);
EXPECT_TRUE(ps->GetName() == "toto");
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
现在,如果我想编译源代码,我需要运行g++ -std=c++11 Student.cpp main.cpp -o a.out
,而如果我想编译测试代码,我需要运行g++ -std=c++11 TestStudent.cpp Student.cpp -lgtest -lpthread -o test.out
。
那么,如何编写CMakeLists.txt
来编译不同的目标,比如cmake NORMAL
和cmake TEST
呢
发布于 2019-08-01 20:27:02
正如评论中所指出的,通过add_executable使用多个目标。下面的CMakeLists.txt
将生成两个目标,分别生成可执行文件student
和student-test
。
如果您不关心CTest,那么可以省略最后三行。
cmake_minimum_required(VERSION 3.9)
project(Student CXX)
set(CMAKE_CXX_STANDARD 11)
set(SOURCES src/Student.cpp)
set(INCLUDES include)
find_package(GTest REQUIRED)
add_executable(student src/main.cpp ${SOURCES})
target_include_directories(student PRIVATE ${INCLUDES})
add_executable(student-test unittest/TestStudent.cpp ${SOURCES})
target_include_directories(student-test PRIVATE ${INCLUDES})
target_link_libraries(student-test GTest::GTest GTest::Main)
enable_testing()
include(GoogleTest)
gtest_add_tests(TARGET student-test AUTO)
https://stackoverflow.com/questions/57306286
复制相似问题