Как построить и связать Google бенчмарк, используя cmake в Windows
Я пытаюсь создать Google-тест и использовать его с моей библиотекой с помощью cmake. Мне удалось построить google-benchmark и успешно запустить все его тесты с помощью cmake. К сожалению, я не могу правильно связать его с моим кодом C++ в Windows, используя cmake или cl.
проблема, я думаю, в том, что google-benchmark собирает библиотеку внутри папки src, то есть она встроена в src/Release/benchmark.lib. Теперь я не могу указать на нее в cmake, если я использую ${benchmark_LIBRARIES}, она ищет библиотеку в папка Release вне src, так как это обычное место, где собираются все библиотеки. и трудно найти примеры, которые работают в Windows.
вот два способа, которые я попробовал, оба могут собрать библиотеку и запустить все тесты, но я не могу указать на библиотеку правильно target_link_library
include(ExternalProject)
ExternalProject_Add(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG master
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build"
CONFIGURE_COMMAND ${CMAKE_COMMAND} -B ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build -S ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON
BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build --config Release
INSTALL_COMMAND ""
TEST_COMMAND ${CMAKE_CTEST_COMMAND} ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build --build-config Release
)
а также
ExternalProject_Add(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG master
PREFIX googlebenchmark
CMAKE_ARGS -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release
INSTALL_COMMAND ""
TEST_COMMAND ${CMAKE_CTEST_COMMAND} --build-config Release
)
как мне связать его с моим файлом C++ try.cpp после этого
5 ответов
CMakeLists.txt, как показано ниже
cmake_minimum_required(VERSION 3.14)
project(g_benchmark)
enable_testing()
include(FetchContent)
## Project-wide setup
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)
# Externally provided libraries
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.10.x)
FetchContent_Declare(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG master) # need master for benchmark::benchmark
FetchContent_MakeAvailable(
googletest
googlebenchmark)
add_executable(g_benchmark main.cpp)
target_link_libraries(g_benchmark benchmark::benchmark)
Требуется версия cmake выше 3.14
$ cmake.
$ cmake --build.
Ссылка: https://github.com/hohaidang/CPP_Basic2Advance/tree/master/Learning/CMake/g_benchmark
Я сам пришел сюда в поисках решения для копирования и вставки, но я не вижу четкого решения, хотя вижу, что на эту страницу смотрит много людей, поэтому вот что я сделал.
Я не использовал ExternalProject_Add
но я был бы рад помочь вам, если бы вы указали мне на полный пример работающего теста, который я мог бы проверить.
Это то, что я использовал в своем проекте
include(FetchContent)
FetchContent_Declare(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark
)
FetchContent_MakeAvailable(googlebenchmark)
target_link_libraries(bench benchmark::benchmark)
Я еще не пробовал его на Windows, но сделаю это в следующий раз, когда загрузусь дома в win. Я пробовал это на нескольких машинах Linux.
Я надеюсь, что это помогает.
Следующее работает с VC++ 2022, также в режиме C++20.
cmake_minimum_required(VERSION 3.20)
project(myproject C CXX)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
set(CMAKE_CXX_STANDARD 20) # choose 14, 17, 20
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS NO)
include(FetchContent)
if (MSVC)
set(gtest_force_shared_crt on) # needed to avoid error LNK2038
endif()
set(BENCHMARK_ENABLE_TESTING off) # to suppress benchmark internal tests
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.11.0) # or "main" for latest
FetchContent_Declare(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG v1.6.0) # or "master" for latest
FetchContent_MakeAvailable(googletest googlebenchmark)
enable_testing()
add_executable(mybench mybench.cpp)
target_link_libraries(mybench PRIVATE benchmark::benchmark)
После охоты за рабочим решением для Visual Studio 2019 я в конце концов заставил его работать. Я создал пример, чтобы помочь другим.
Вы можете просто сделать это:
cmake_minimum_required(VERSION 3.16)
project(googletest-download NONE)
include(ExternalProject)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG master
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
перезагрузите проект cmake и запустите сборку, если вы используете Clion