Les bibliothèques "header-only"avec CMake
소개
Dans cet article, je vais vous expliquer comment créer et se servir d'une bibliothèque header-only. Si vous ne savez pas ce que c'est, ou si vous avez besoin d'un petit rappel, je vous Invitation à lire cet article .
Créer une bibliothèques 헤더 전용
푸어 en créer une, presque la meme méthode que pour une bibliothèque statique ou une partagee를 활용하십시오. Lors de l'appel à la fonction add_library , il suffit d'utiliser le mot-clef INTERFACE aulieu de STATIC ou SHARED.
Une bonne pratique est d'utiliser la fonction target_sources , en 인수, les fichiers headers composant la bibliothèque. Cela leur permet d'apparaitre correctment lorsque le projet sera ouvert via un IDE, Tel que Visual Studio par exemple.
Voici à quoi cela peut resembler:
# Create a library named 'Awesome'
add_library(Awesome INTERFACE)
# It is composed of 2 headers
target_sources(Awesome INTERFACE Awesome.hpp MoreAwesome.hpp)
Utiliser une bibliothèques 헤더 전용
Si elle a été créée avec CMake
Dans ce cas la, c'est tout simple, il suffit d'appeler la fonction target_link_libraries comme vous le feriez pour n'importe quelle bibliothèque. 예를 들자면:
# Create a basic target
add_executable(my_exe main.cpp)
# Let's imagine the library is called header_lib and use it
target_link_libraries(my_exe header_lib)
Bien évidemment, comme pour inclure n'importe quel autre type de bibliothèque, vous devrez soit inclure le fichier CMakeLists.txt de la bibliothèque avec la fonction add_subdirectory , soit sinon chercher directement la bibliothèque avec find_library , soit chercher le 패키지 avec find_package
Si elle n'a pas été créée avec CMake
La solution la plus simple est d'ajouter le dossier contenant les fichiers composant la bibliothèque dans le path où le compilateur cherchera les headers. 푸어 셀라, c'est très simple, il suffit d'appeler la fonction target_include_directories .
add_executable(my_exe main.cpp)
# The source of the library are in the folder 'path/to/lib_sources'
target_include_directories(my_exe PRIVATE path/to/lib_sources)
Une autre solution un peu plus propre (et qui reste très simple) est de créer une bibliothèque avec cmake à partir des sources, comme vu au début de l'article. Ensuite, il suffit d'utiliser cette bibliothèque comme vu prédemment.
예시 완성
Imaginons un projet composé d'une bibliothèque header-only et d'un exécutable qui 활용 cette bibliothèque. L'arborescence des fichiers est la suivante :
.
├── CMakeLists.txt
├── lib
│ ├── CMakeLists.txt
│ └── Commentinator
│ ├── Commentinator.hpp
│ └── Impl.hpp
└── src
└── main.cpp
CMakeLists.txt의 연속된 문서를 참고하십시오.
# Create the library
add_library(Commentinator INTERFACE)
# Add the sources for a better integrations in the IDE
target_sources(Commentinator INTERFACE
${CMAKE_CURRENT_LIST_DIR}/Commentinator/Commentinator.hpp
${CMAKE_CURRENT_LIST_DIR}/Commentinator/Impl.hpp)
# This library requires c++17
target_compile_features(Commentinator INTERFACE cxx_std_17)
# And the most important part set the include directories
target_include_directories(Commentinator INTERFACE ${CMAKE_CURRENT_LIST_DIR})
Et maintenant, celui de l'executable qui va utiliser cette bibliothèque :
# Basic stuff every CMake project need
cmake_minimum_required(VERSION 3.12)
project(bestProjectEver VERSION 1.2.0 DESCRIPTION "The best project ever created in the world.")
# Include the CMakeLists.txt of the library
add_subdirectory(lib)
# Create the executable named `example`
add_executable(example ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp)
# Use the library
target_link_libraries(example Commentinator)
Et voilà, vous avez maintenant toutes les clefs en main pour utiliser et créer des bibliothèques header-only !
출처
Reference
이 문제에 관하여(Les bibliothèques "header-only"avec CMake), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/baduit/les-bibliotheques-header-only-avec-cmake-4776텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)