1

从网络上的相关搜索中,我得到了一个 google-benchmark不容易融入 CMake 项目的印象。我可以做到这一点的一种方法是添加为外部项目,逐字复制GTestgoogle-test自述文件中的相应文本:

# adding google-benchmark as external git project
#=======================================================
configure_file(extern/googlebenchmark/CMakeLists.txt.in googlebenchmark-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
        RESULT_VARIABLE result
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-download)
if(result)
    message(FATAL_ERROR "CMake step for googlebenchmark failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
        RESULT_VARIABLE result
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-download )
if(result)
    message(FATAL_ERROR "Build step for googlebenchmark failed: ${result}")
endif()

# Prevent overriding the parent project's compiler/linker
# settings on Windows
set(gbenchmark_force_shared_crt ON CACHE BOOL "" FORCE)

add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src
        ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build
        EXCLUDE_FROM_ALL)

if (CMAKE_VERSION VERSION_LESS 2.8.11)
    include_directories("${gbenchmark_SOURCE_DIR}/include")
endif()

并具有如何在 Windows 中使用 cmake 构建和链接 google benchmark 中CMakeLists.txt.in的内容

然而,这有一个巨大的缺点:每次我们更改CMakeLists.txt托管所有这些的最顶层的东西时,它都会从头开始构建 google-benchmark,并运行所有“测试”,无论它们是什么。因此编译时间变得更长。

如果没有对 Linux 服务器的 root 访问权限,是否有更便携的方式将基准代码安装在一个人的主目录中,同时能够在 CMake 项目中链接到它?

编辑:我必须说我已经能够git clone测试代码并成功地将其构建在我的主目录中。

编辑:回答我自己的问题。我不确定这是否值得关闭,并留给顾客来决定,但我已经解决了如下问题。在CMakeLists.txt其中可以有以下内容:

cmake_minimum_required(VERSION 3.15)

set(CMAKE_CXX_STANDARD 17)

add_executable(sample_bench sample_bench.cpp)
target_link_libraries(sample_bench PUBLIC benchmark benchmark_main pthread)
target_link_directories(sample_bench PUBLIC ~/local/benchmark/build/src)
target_include_directories(sample_bench PUBLIC
        ~/local/benchmark/include)

这里的关键是target_link_directories-Lhttps://github.com/google/benchmark的示例中指定

4

1 回答 1

2

回答我自己的问题。我已经解决了如下问题。在 CMakeLists.txt 中可以有以下内容:

cmake_minimum_required(VERSION 3.15)

set(CMAKE_CXX_STANDARD 17)

add_executable(sample_bench sample_bench.cpp)
target_link_libraries(sample_bench PUBLIC benchmark benchmark_main pthread)
target_link_directories(sample_bench PUBLIC ~/local/benchmark/build/src)
target_include_directories(sample_bench PUBLIC
        ~/local/benchmark/include)

这里的关键是 target_link_directories,它-Lhttps://github.com/google/benchmark的示例中指定。 这足以运行示例基准测试,至少 - 没有尝试过其他的。也就是说,一旦你在某处建立了基准测试——甚至在你的主目录中,如示例中——你可以指向CMake指定的位置,以便编译你的代码。

于 2019-11-26T20:39:23.723 回答