我试着理解以前的帮助:
所以我用gtest写了一个非常简单的项目用例。
目前我有:
% cat CMakeLists.txt
cmake_minimum_required(VERSION 3.24)
project(p)
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG 58d77fa8070e8cec2dc1ed015d66b454c8d78850 # release-1.12.1
OVERRIDE_FIND_PACKAGE
)
FetchContent_MakeAvailable(googletest)
if(TARGET GTest::gtest_main)
message("Target was found")
endif()
find_package(GTest 1.12.1 REQUIRED)
# Now make sure hwy uses our gtest 1.12.1:
set(HWY_SYSTEM_GTEST ON CACHE BOOL "")
FetchContent_Declare(
hwy
GIT_REPOSITORY https://github.com/google/highway.git
GIT_TAG 22e3d7276f4157d4a47586ba9fd91dd6303f441a # 1.0.1
)
FetchContent_MakeAvailable(hwy)
如果我运行它,我得到的是:
$ cmake ..
[...]
Target was found
-- Found GTest: /usr/lib/x86_64-linux-gnu/libgtest.a (Required is at least version "1.12.1")
[...]
-- Found GTest: /usr/lib/x86_64-linux-gnu/cmake/GTest/GTestConfig.cmake (found version "1.10.0")
这个输出对我来说是完全没有意义的。我想在构建hwy1.0.1的过程中重新注入googletest 1.12.1的构建树。我的问题如下:在上面的例子中,我应该怎么做?
关于包()的原始上游文档非常不清楚。
问题的重要部分是以下两行:
# Now make sure hwy uses our gtest 1.12.1:
set(HWY_SYSTEM_GTEST ON CACHE BOOL "")
把gtest再注入到hwy中的机制。我的问题不是直接通过获取内容直接使用gtest。
发布于 2022-09-07 11:47:24
下面是对我有用的东西(使用cmake 3.24.1)
cmake_minimum_required(VERSION 3.24)
project(p)
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG 58d77fa8070e8cec2dc1ed015d66b454c8d78850 # release-1.12.1
OVERRIDE_FIND_PACKAGE)
FetchContent_MakeAvailable(googletest)
if(NOT EXISTS ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/gtest-config.cmake
AND NOT EXISTS ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/GTestConfig.cmake)
file(
WRITE ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/gtest-config.cmake
[=[
include(CMakeFindDependencyMacro)
find_dependency(googletest)
if(NOT TARGET GTest::GTest)
add_library(GTest::GTest INTERFACE IMPORTED)
target_link_libraries(GTest::GTest INTERFACE GTest::gtest)
endif()
if(NOT TARGET GTest::Main)
add_library(GTest::Main INTERFACE IMPORTED)
target_link_libraries(GTest::Main INTERFACE GTest::gtest_main)
endif()
]=])
endif()
if(NOT EXISTS ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/gtest-config-version.cmake
AND NOT EXISTS ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/GTestConfigVersion.cmake)
file(
WRITE ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/gtest-config-version.cmake
[=[
include(${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/googletest-config-version.cmake OPTIONAL)
if(NOT PACKAGE_VERSION_COMPATIBLE)
include(${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/googletestConfigVersion.cmake OPTIONAL)
endif()
]=])
endif()
FetchContent_Declare(
hwy
GIT_REPOSITORY https://github.com/google/highway.git
GIT_TAG 22e3d7276f4157d4a47586ba9fd91dd6303f441a # 1.0.1
)
# Now make sure hwy uses our gtest 1.12.1:
set(HWY_SYSTEM_GTEST
ON
CACHE BOOL "")
FetchContent_MakeAvailable(hwy)
仅供参考,自提交以来,hwy现在支持新的风格gtest:
发布于 2022-09-06 17:57:03
官方的文档说:
FetchContent_Declare( .)调用包括此选项,随后调用find_package( .)将确保FetchContent_MakeAvailable()已被调用
您正在为FetchContent_Declare
和find_package
使用不同的名称。使用find_package(googletest 1.12.1 REQUIRED)
就可以了。
不幸的是,googletest附带的cmake脚本中有一个"bug“,所以您不能将GTest
与FetchContent_Declare
一起使用。它对子项目使用GTest_FOUND
和GMock_FOUND
,因此不能对父项目使用GTest
(名称冲突)。
发布于 2022-09-09 14:13:05
以下代码适用于我:
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(case23)
include(FetchContent)
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.12.1
)
FetchContent_MakeAvailable(googletest)
add_executable(main main.cpp)
target_link_libraries(main gtest_main)
main.cpp
#include <gtest/gtest.h>
int myadd(int a, int b) {
return a + b;
}
TEST(testCase, test1) {
EXPECT_EQ(myadd(2, 3), 5);
}
https://stackoverflow.com/questions/73624739
复制相似问题