1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| #chaque bibliothèque représente un projet différent
project(lib_a VERSION 1.0.0.0 LANGUAGES CXX)
# par facilité, je te conseillerais de créer une liste
# contenant les fichier d'en-tete et une autre contenant
# les fichier d'implémentation, sous la forme de
set(HEADERS include/en-tete_1.hpp
inclulde/en-tete_2.hpp
# ...
)
set(SRCS src/implementation_1.cpp
src/implementation_2.cpp
# ...
)
# on récupère le nom du projet comme nom de cible, c'est le plus facile
set(TARGET_NAME ${PROJECT_NAME})
# par facilité, on défini le dossier dans lequel se trouve les fichiers d'en-tête
set(INC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
# on cree une bibliothèque objet pour ne pas devoir compiler
# deux fois nos fichiers si on veut une version statique et une version
# dynamique
add_libary(${TARGET_NAME}_obj OBJECT "")
# certains anciens compilateur ont besoin de cette information
set_target_properties(${TARGET_NAME}_obj
PROPERTIES
POSITION_INDEPENDENT_CODE 1
)
# on défini les source de cette cible: les fichiers d'en-tête
# sont publiques, les fichier d'implémentation sont privés
target_sources(${TARGET_NAME}_obj
PUBLIC ${HEADERS}
PRIVATE ${SRCS})
# on ajoute le dossier include à la liste des dossiers
# dans lesquels chercher les en-tête
target_include_directories(${TARGET_NAME}_obj ${INC_DIR})
# si on veut une version statique de la bibliothèque:
if(LIB_A_BUILD_STATIC)
add_library(${TARGET_NAME}-static
STATIC
$<TARGET_OBJECTS:${TARGET_NAME}_obj>
)
set_target_properties(${TARGET_NAME}-static
PROPERTIES
OUTPUT_NAME "${TARGET_NAME}"
)
#on indique la dépendance avec lib_b
target_link_libraries(lib_b)
endif()
# si on veut une version dynamique de la bibliothèque
if(LIB_A_BUILD_SHARED
add_library(${TARGET_NAME}-shared
SHARED
$<TARGET_OBJECTS:${TARGET_NAME}_obj >
)
set_target_properties(${TARGET_NAME}-shared
PROPERTIES
OUTPUT_NAME "${TARGET_NAME}"
)
#on indique la dépendance avec lib_b
target_link_libraries(lib_b)
endif() |