首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GBenchmark和CMake

GBenchmark和CMake
EN

Stack Overflow用户
提问于 2019-11-25 22:26:56
回答 1查看 892关注 0票数 1

从网上的相关搜索中,我得到的印象是,google-benchmark并不容易被整合到CMake项目中。我可以这样做的一种方法是作为外部项目添加,逐字复制google-test的自述文件中对应的GTest文本:

代码语言:javascript
复制
# 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()

并将CMakeLists.txt.in的内容与How to build and link google benchmark using cmake in windows中的内容相同

然而,这有一个巨大的缺点:每当我们改变CMakeLists.txt中的某些东西--最上面的一个--承载了所有这些的时候,它就开始从头开始构建谷歌基准,运行所有的“测试”,不管它们是什么。这样,编译时间就变长了。

如果没有对Linux服务器的根访问,是否有更少可移植的方式将基准代码安装在自己的主目录中,同时能够在CMake项目中链接到它呢?

编辑:我必须说,我已经能够git clone的基准代码,并成功地构建了它在我的主目录。

编辑:回答我自己的问题。我不知道这是否值得关闭,并由主顾决定,但我已经解决了以下问题。在CMakeLists.txt中,可以包含以下内容:

代码语言:javascript
复制
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,它是在https://github.com/google/benchmark的示例中用-L指定的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 20:39:23

回答我自己的问题。我解决了这个问题如下。在CMakeLists.txt中,可以包含以下内容:

代码语言:javascript
复制
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指向指定的位置,以便您的代码编译。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59041027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档