Modern Cmake et création d'un librairie
Bonjour,
J'essaie de créer une librairie en utilisant Cmake, plus précisément le "modern cmake". Elle est composé de 3 niveaux de dossiers MaLibrairie (ML)- SousDossier (SD) - SousSousDossier(SSD). Dans chacun de mes dossier j'ai un CMakeLists.txt que vous trouverez ci dessous. Je les compile sans problème, je génère en spécifiant le dossier d'installation. Sauf qu'en allant dans mon dossier d'installation, je n'ai rien ...
L'idéal serait même à terme de générer une lib par SousDossier, histoire de complexifier jusqu'au bout.
Je précise que je suis sous Ubuntu 18.04.1 LTS et que j'utilise CMake pour l’exécution via l'interface graphique (j'ai fait un peu la flemmarde sur ce coup et je ne suis pas passée via la terminal). Je précise également que c'est mon tout premier projet, je débute vraiment sur le sujet il y a certainement un ou des problèmes que je n'arrive pas à identifier.
////////////////////////////////////////
Tout code en commentaire, hors Todo / TD, est du code que je n'arrive pas à placer ou que je ne sais pas si il est nécessaire pour la génération
MaLibrairie :
Code:
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
|
cmake_minimum_required(VERSION 3.0)
cmake_policy(VERSION 3.0.0)#for MSVC
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message("Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release")
endif()
# Set a default C++ compile flag
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEX2" CACHE STRING "Set C++ Compiler Flags" FORCE)
project(ML DESCRIPTION "My Lib"
LANGUAGES CXX
VERSION 0.1.0)
# ---- Find Packages ----#Todo later
#find_package( LibExtern REQUIRED)
#Todo later
#target_link_libraries(ML LibExtern::LibExtern)
#option is the default option and appear in the interface
option(SD "Set ON to Build CV Module" ON)
if(SD)
include_directories("${PROJECT_SOURCE_DIR}/SD")
add_subdirectory(SD)
set (EXTRA_LIBS ${EXTRA_LIBS} SD)
endif(SD)
#target_link_libraries (ML ${EXTRA_LIBS}) # marche pas, pourquoi ? |
SousDossier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
cmake_minimum_required(VERSION 3.0)
cmake_policy(VERSION 3.0.0)#for MSVC
project(SD DESCRIPTION "SD"
LANGUAGES CXX
VERSION 0.1.0)
#add_library(SD ALIAS ${PROJECT_NAME})#marche pas, pourquoi ?
#set is the defaut and do not appear in cmake interface
set(SSD ON)
add_subdirectory(SSD)
#target_link_libraries(SD SSD)#marche pas, pourquoi ? |
SousSousDossier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
cmake_minimum_required(VERSION 3.0)
cmake_policy(VERSION 3.0.0)#for MSVC
project(SSD DESCRIPTION "SSD"
LANGUAGES CXX
VERSION 0.1.0)
set(SOURCE_FILES src/file.cpp include/file.h)
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
add_library(SD::SSD ALIAS ${PROJECT_NAME})#?::?::?
target_include_directories( ${PROJECT_NAME}
PUBLIC ${PROJECT_SOURCE_DIR}/include
PRIVATE ${PROJECT_SOURCE_DIR}/src
)
install(FILES SSD LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}) #essayer aussi TARGET |