5
votes

Comment créer et lier un benchmark Google à l'aide de cmake dans Windows

J'essaie de créer google-benchmark et de l'utiliser avec ma bibliothèque en utilisant cmake. J'ai réussi à créer google-benchmark et à exécuter tous ses tests avec succès en utilisant cmake. Je suis malheureusement incapable de le lier correctement avec mon code C ++ dans Windows en utilisant cmake ou cl.

le problème que je pense est que google-benchmark construit la bibliothèque dans le dossier src, c'est-à-dire qu'il est construit dans src / Release / benchmark.lib maintenant je ne peux pas le pointer dans cmake si j'utilise $ {benchmark_LIBRARIES} il recherche la bibliothèque dans le dossier Release en dehors de src, car c'est l'endroit habituel où toutes les bibliothèques sont construites. et il est difficile de trouver des exemples qui fonctionnent dans Windows.

voici deux façons que j'ai essayées, les deux peuvent construire la bibliothèque et tous les tests s'exécutent mais je ne peux pas pointer correctement la bibliothèque vers target_link_library

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
)

et

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 
)

comment puis-je le lier à mon fichier c ++ try.cpp après cela


5 commentaires

jetez un œil à cet exemple: github.com/RichardDally/MicroBenchmark


nous devons installer un benchmark pour que cela fonctionne correctement?


Oui. L'installation ajoutera certains fichiers aux répertoires communs. Ainsi, les fichiers du package GoogleBenchmark peuvent être trouvés par cmake.


mais ne pouvons-nous pas l'utiliser sans installer?


Je suppose que personne dans Google n'utilise Windows [cant]


3 Réponses :


2
votes

Je suis venu ici à la recherche d'une solution de copier-coller moi-même mais je ne vois pas de solution claire alors que je vois qu'il y a beaucoup de gens qui regardent cette page, alors voici ce que j'ai fait.

Je n'ai pas utilisé ExternalProject_Add mais je serais heureux de vous aider si vous me dirigiez vers un exemple de test en cours d'exécution complet que je pourrais vérifier.

C'est ce que j'ai utilisé dans mon projet

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

target_link_libraries(bench benchmark::benchmark)

Je ne l'ai pas encore essayé sur Windows mais je le ferai la prochaine fois que je démarrerai Win à la maison. Je l'ai essayé sur plusieurs machines Linux.

J'espère que cela aide.


0 commentaires

0
votes

Après avoir recherché une solution fonctionnelle pour Visual Studio 2019, je l'ai finalement fait fonctionner. J'ai créé un exemple pour aider les autres.


0 commentaires

1
votes

CMakeLists.txt comme ci-dessous

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)

Nécessite la version cmake supérieure à 3.14

$ cmake.

$ cmake --build.

Référence: https://github.com/hohaidang/CPP_Basic2Advance/tree/master/Learning/CMake/g_benchmark


0 commentaires