首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake:无法使用从源代码生成的带有错误的gtest“gtest/gtest.h‘文件未找到”

CMake:无法使用从源代码生成的带有错误的gtest“gtest/gtest.h‘文件未找到”
EN

Stack Overflow用户
提问于 2022-05-23 20:51:53
回答 1查看 523关注 0票数 0

我试图从源代码构建GTest,然后使用cmake将我的目标链接到它。但我看到了这个错误

代码语言:javascript
运行
复制
mygtest % cmake --build build
[ 50%] Building CXX object CMakeFiles/hello_test.dir/mytest.cpp.o
/path/to/test/mygtest/mytest.cpp:1:10: fatal error: 'gtest/gtest.h' file not found
#include <gtest/gtest.h>
         ^~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/hello_test.dir/mytest.cpp.o] Error 1
make[1]: *** [CMakeFiles/hello_test.dir/all] Error 2
make: *** [all] Error 2

我的问题是我在这里能错过什么?

这是我的CMakeList文件

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.14)
project(my_project)

set(CMAKE_CXX_STANDARD 14)

find_library(
  GTEST_MAIN
  gtest_main
  PATHS /path/to/googletest/build/lib/
  NO_DEFAULT_PATH
  )

enable_testing()

add_executable(
  hello_test
  mytest.cpp
)
target_link_libraries(
  hello_test
  ${GTEST_MAIN}
)

include(GoogleTest)
gtest_discover_tests(hello_test)

我试过什么?

  1. 打印目标的链接库

代码语言:javascript
运行
复制
get_target_property(HELLO_TEST_LIBRARIES hello_test LINK_LIBRARIES)
include(CMakePrintHelpers)
cmake_print_variables(HELLO_TEST_LIBRARIES)

// OUTPUT
-- HELLO_TEST_LIBRARIES="/path/to/googletest/build/lib/libgtest_main.a"

使用here (Gtest)然后链接GTest::gtest工作的

  1. ,但我不想使用预编译的版本--它似乎导致了前面提到的“未找到的符号”错误
EN

Stack Overflow用户

发布于 2022-05-25 01:07:07

我愿意接受任何其他更好的答案,但我会把我目前的解决方案寄给那些可能感兴趣的人。

谢谢亚历克斯·雷克和@空间土豆的评论。根据建议,将下面的代码插入您的CMakeLists.txt将允许您自动下载googletest和从源代码构建。

代码语言:javascript
运行
复制
FetchContent_Declare(
 googletest
 GIT_REPOSITORY    https://github.com/google/googletest.git
 GIT_TAG           main
 SUBBUILD_DIR ${PROJECT_BINARY_DIR}/googletest-subbuild
 BINARY_DIR ${PROJECT_BINARY_DIR}/googletest-build
 SOURCE_DIR ${PROJECT_BINARY_DIR}/googletest-src
 )

FetchContent_Populate(
  googletest
)

execute_process(COMMAND cmake -S. -B${googletest_BINARY_DIR} WORKING_DIRECTORY ${googletest_SOURCE_DIR})
execute_process(COMMAND cmake --build . WORKING_DIRECTORY ${googletest_BINARY_DIR})

set(GTEST_LIBRARY ${googletest_BINARY_DIR}/lib/libgtest.a)
set(GTEST_INCLUDE_DIR ${googletest_SOURCE_DIR}/googletest/include)
set(GTEST_MAIN_LIBRARY ${googletest_BINARY_DIR}/lib/libgtest_main.a)

find_package(GTest REQUIRED)

然后,您可以将其链接到您的目标

代码语言:javascript
运行
复制
target_link_libraries(<target> GTest::gtest_main)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72354684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档