【问题标题】:How to create a CMakeLists.txt for GoogleTest? [duplicate]如何为 GoogleTest 创建 CMakeLists.txt? [复制]
【发布时间】:2021-05-07 18:39:01
【问题描述】:

我是 cmake 新手,我正在尝试创建一个 CMakeLists.txt 来编译我的测试文件。 我有 3 个文件:calc.cppcalc.hppcalc_test.cpp,我使用以下命令编译我的测试:

g++ -o calc_test calc_test.cpp calc.cpp -lgtest -lpthread

它会生成一个二进制文件 (calc_test),我执行该文件来运行我的测试。

这是我的calc.hpp

#ifndef CALC_HPP_
#define CALC_HPP_

int add(int op1, int op2);
int sub(int op1, int op2);

#endif

我的calc.cpp

#include "calc.hpp"

int add(int op1, int op2) {
    return op1 + op2;
}

int sub(int op1, int op2) {
    return op1 - op2;
}

还有我的calc_test.cpp

#include <gtest/gtest.h>
#include "calc.hpp"

TEST(CalcTest, Add) {
    ASSERT_EQ(2, add(1, 1));
    ASSERT_EQ(5, add(3, 2));
    ASSERT_EQ(10, add(7, 3));
}

TEST(CalcTest, Sub) {
    ASSERT_EQ(3, sub(5, 2));
    ASSERT_EQ(-10, sub(5, 15));
}

int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

现在我创建了一个 CMakeLists.txt 文件来编译我的测试文件并成功生成 Makefile,但是当我执行 cmake --build . 时它会抛出 undefined reference 错误。 这是我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_test 应用程序与 googleTest 链接,而不是您的库。
  • 我该怎么做?正如我所说,我是 cmake 的新手。 @AlexeyLarionov
  • 最好的方法是从你的主项目中创建一个库。然后,您可以将此库链接到主可执行文件或 Google 测试二进制文件,因为它们都是单独的可执行文件,但需要共享您的主代码。我有一个示例项目,但我找不到它。 :(
  • 谢谢,我会分享我的文件。 @Devolus
  • 列出没有-l 的库名称,即target_link_libraries(TestModlue gtest pthread) 此外,您将gtest 链接到您的lib,但既不将该lib 也不将gtest 链接到可执行文件。由于calc_test.cpp 我们使用gtest 文件,因此您应该将lib 链接到实际使用gtest 的目标,而不是其他目标。 target_link_libraries(calc_test gtest TestModlue pthread) 似乎是 target_link_libraries 命令的正确版本。 (定位在add_executable之后)

标签: c++ cmake googletest


【解决方案1】:

您可以将此作为如何设置项目结构的示例。它基本上遵循我在上面的评论中写的内容。 CMake Google Test Example

* 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

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多