GBenchmark 和 CMake
GBenchmark and CMake
通过网络上的相关搜索,我的印象是
google-benchmark
不容易合并到 CMake 项目中。
我可以这样做的一种方法是添加为外部项目,
在 google-test 的自述文件中逐字复制 GTest
的相应文本:
# 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
中的某些内容 - 最上面的 - 承载所有这些内容时,它会从头开始构建 google-benchmark,
运行 所有 "tests",无论它们是什么。因此编译时间变长。
没有对 Linux 服务器的 root 访问权限,是否有任何 more-less 可移植的方法
将基准代码安装在一个人的主目录中,同时
能够 link 在 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)
这里的key是target_link_directories
,在https://github.com/google/benchmark
的例子中用-L
指定
回答我自己的问题。我已经解决了如下问题。在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)
这里的key是target_link_directories,在https://github.com/google/benchmark的例子中用-L
指定
这足以 运行 样本基准,至少——还没有尝试过其他的。
也就是说,一旦您在某处构建了基准测试——即使在您的主目录中,如示例中那样——您可以将 CMake
指向指定位置,
为了让你的代码编译。
通过网络上的相关搜索,我的印象是
google-benchmark
不容易合并到 CMake 项目中。
我可以这样做的一种方法是添加为外部项目,
在 google-test 的自述文件中逐字复制 GTest
的相应文本:
# 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
中的某些内容 - 最上面的 - 承载所有这些内容时,它会从头开始构建 google-benchmark,
运行 所有 "tests",无论它们是什么。因此编译时间变长。
没有对 Linux 服务器的 root 访问权限,是否有任何 more-less 可移植的方法 将基准代码安装在一个人的主目录中,同时 能够 link 在 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)
这里的key是target_link_directories
,在https://github.com/google/benchmark
-L
指定
回答我自己的问题。我已经解决了如下问题。在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)
这里的key是target_link_directories,在https://github.com/google/benchmark的例子中用-L
指定
这足以 运行 样本基准,至少——还没有尝试过其他的。
也就是说,一旦您在某处构建了基准测试——即使在您的主目录中,如示例中那样——您可以将 CMake
指向指定位置,
为了让你的代码编译。