如何在 Windows 中使用 cmake 构建和链接谷歌基准测试

mat*_*guy 6 benchmarking cmake microbenchmark google-benchmark

我正在尝试构建 google-benchmark 并使用 cmake 将它与我的库一起使用。我已经成功构建了 google-benchmark 并使用 cmake 成功运行了所有测试。不幸的是,我无法使用 cmake 或 cl 在 windows 中将它与我的 c++ 代码正确链接。

我认为的问题是 google-benchmark 在 src 文件夹中构建库,即它构建在 src/Release/benchmark.lib 现在我不能在 cmake 中指向它,如果我使用 ${benchmark_LIBRARIES} 它在src 外的 Release 文件夹,因为这是构建所有库的常用位置。并且很难找到在 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 
)
Run Code Online (Sandbox Code Playgroud)

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
)
Run Code Online (Sandbox Code Playgroud)

在此之后我如何将它链接到我的 C++ 文件 try.cpp

小智 12

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 main) # need main for benchmark::benchmark

FetchContent_MakeAvailable(
        googletest
        googlebenchmark)

add_executable(g_benchmark main.cpp)
target_link_libraries(g_benchmark benchmark::benchmark)
Run Code Online (Sandbox Code Playgroud)

需要cmake版本3.14以上

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 main) # need main for benchmark::benchmark

FetchContent_MakeAvailable(
        googletest
        googlebenchmark)

add_executable(g_benchmark main.cpp)
target_link_libraries(g_benchmark benchmark::benchmark)
Run Code Online (Sandbox Code Playgroud)

参考: https: //github.com/hohaidang/CPP_Basic2Advance/tree/master/Learning/CMake/g_benchmark


pat*_*osn 5

我来这里寻找复制粘贴解决方案,但我没有看到任何明确的解决方案,而我看到有很多人在查看此页面,所以这就是我所做的。

我没有使用过ExternalProject_Add,但如果您向我指出一个我可以查看的完整运行测试示例,我将很乐意为您提供帮助。

这是我在我的项目中使用的

include(FetchContent)
FetchContent_Declare(googlebenchmark
                     GIT_REPOSITORY https://github.com/google/benchmark
        )
FetchContent_MakeAvailable(googlebenchmark)

target_link_libraries(bench benchmark::benchmark)
Run Code Online (Sandbox Code Playgroud)

我还没有在 Windows 上尝试过,但下次我在家启动 win 时我会这样做。我在几台 Linux 机器上尝试过。

我希望它有帮助。

编辑 2023:从 CMake 3.11 开始,可以使用 FetchContent_Declare 和 FetchContent_MakeAvailable,如优秀的现代 CMake 简介中所示。人们也可以使用 git 子模块(或直接下载项目)并简单地使用include(path).