C++ 如何为GoogleTest创建CMakeLists.txt?
我是cmake的新手,我正在尝试创建一个用于编译测试文件的CMakeLists.txt。 我有3个文件:C++ 如何为GoogleTest创建CMakeLists.txt?,c++,cmake,googletest,C++,Cmake,Googletest,我是cmake的新手,我正在尝试创建一个用于编译测试文件的CMakeLists.txt。 我有3个文件:calc.cpp、calc.hpp和calc\u test.cpp,我使用以下命令编译测试: g++-o计算测试计算测试.cpp计算测试.cpp-lgtest-lpthread 它生成一个二进制文件(calc_test),我执行该文件来运行测试 这是我的calc.hpp: #如果计算水电站_ #定义CALC_水电站_ int-add(int-op1,int-op2); int sub(int
calc.cpp
、calc.hpp
和calc\u test.cpp
,我使用以下命令编译测试:
g++-o计算测试计算测试.cpp计算测试.cpp-lgtest-lpthread
它生成一个二进制文件(calc_test
),我执行该文件来运行测试
这是我的calc.hpp
:
#如果计算水电站_
#定义CALC_水电站_
int-add(int-op1,int-op2);
int sub(int op1、int op2);
#恩迪夫
我的calc.cpp
:
#包括“calc.hpp”
int add(int op1,int op2){
返回op1+op2;
}
int sub(int op1、int op2){
返回op1-op2;
}
和我的计算测试.cpp
:
#包括
#包括“计算水电站”
测试(计算测试,添加){
断言式(2,加上(1,1));
断言式(5,加上(3,2));
断言式(10,加上(7,3));
}
测试(CalcTest,Sub){
断言式(3,sub(5,2));
断言等式(-10,sub(5,15));
}
int main(int argc,字符**argv){
测试:InitGoogleTest(&argc,argv);
返回运行所有测试();
}
现在我已经创建了一个CMakeLists.txt文件来编译我的测试文件,它成功地生成了Makefile,但是当我执行cmake--build.
时,它抛出未定义的引用
错误。
以下是我的CMakeLists.txt
的内容:
cmake_minimum_required(VERSION 3.10)
project(Google_Test)
add_library(TestModlue calc.cpp)
target_link_libraries(TestModlue -lgtest -lpthread)
add_executable(calc_test calc_test.cpp)
我做错了什么?您可以将此作为如何设置项目结构的示例。它基本上遵循了我在上面的评论中所写的内容
你可能需要将你的
calc_测试应用程序链接到googleTest,而不是你的库。我怎么做?正如我所说,我对cmake是新手@AlexeyLarionovBest方法是从主项目创建一个库。这个库可以链接到主可执行文件或Google测试二进制文件,因为它们都是单独的可执行文件,但需要共享主代码。我有一个样本项目,但我找不到(谢谢,我将共享我的文件。@devolus列出不带-l
的库名,即目标链接库(TestModlue gtest pthread)
此外,您正在将gtest
链接到您的lib,但既不将该lib也不将gtest链接到可执行文件。由于calc_test.cpp
使用gtest创建文件,您应该将lib链接到实际使用gtest
的目标,而不是其他一些目标。target_link_库(calc_test gtest test test modlue pthread)
似乎是目标链接库
命令的正确版本。(位于添加可执行文件
之后)
* Your main code is put inside a library instead of directly including it in the application
* Create a seperate main binary (your application)
* Create another binary which contains your google tests
* Link both projects (application/gtests) against your library