如何在Windows中使用cmake构建和链接Google基准

时间:2019-03-27 11:28:36

标签: c++ cmake benchmarking microbenchmark google-benchmark

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

我认为的问题是google-benchmark会在src文件夹中构建库,即它是在src / Release / benchmark.lib中构建的,如果我使用$ {benchmark_LIBRARIES}来查找,我现在无法在cmake中指向它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 
)

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

4 个答案:

答案 0 :(得分:2)

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

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

这就是我在项目中使用的

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

target_link_libraries(bench benchmark::benchmark)

我还没有在Windows上尝试过它,但是下次我下次在家中赢得胜利时会做。我在几台Linux机器上都尝试过。

我希望这会有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在寻找适用于Visual Studio 2019的可行解决方案后,我最终使它正常工作。我创建了example来帮助他人。

答案 3 :(得分:0)

你可以简单地这样做:

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      ""
        )

如果您使用 Clion,请重新加载 cmake 项目并运行构建