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
我来这里寻找复制粘贴解决方案,但我没有看到任何明确的解决方案,而我看到有很多人在查看此页面,所以这就是我所做的。
我没有使用过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).
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |