Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为GoogleTest创建CMakeLists.txt?_C++_Cmake_Googletest - Fatal编程技术网

C++ 如何为GoogleTest创建CMakeLists.txt?

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

我是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 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