Je commence à utiliser CMAKE avec C et en fait je crée deux très petites bibliothèques statiques.
Mon but est:
-lnameoflib
, qui est un indicateur de compilation. D'ACCORD. J'ai préparé mes CMakeLists.txt et il copie en fait les fichiers * .a dans /usr/local/lib
. Cependant, pour pouvoir les utiliser dans un programme, je dois également copier leurs fichiers d'en-tête dans /usr/local/include
, alors je peux les inclure facilement #include <mylibheader.h>
. Voilà comment je le comprends maintenant.Et ma question est - comment est la bonne façon de copier les fichiers d'en-tête dans le dossier/usr/include avec CMAKE? Je voudrais qu'il les copie automatiquement lorsque make install
est exécuté, tout comme les fichiers * .a.
Pour les deux bibliothèques, j'ai un CMakeLists.txt smiliar:
project(programming-network)
add_library(programming-network STATIC
send_string.c
recv_line.c
)
INSTALL(TARGETS programming-network
DESTINATION "lib"
)
Une meilleure façon pour la dernière version de cmake est d'utiliser le PUBLIC_HEADER
Propriétés.
project(myproject)
add_library(mylib some.c another.c)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER "some.h;another.h")
INSTALL(TARGETS mylib
LIBRARY DESTINATION some/libpath
PUBLIC_HEADER DESTINATION some/includepath
)
Quelques ref:
De manière bien meilleure, copiera tous les fichiers qui correspondent au modèle et préservera la structure du répertoire.
INSTALL (
DIRECTORY ${CMAKE_SOURCE_DIR}/include/
DESTINATION include
FILES_MATCHING PATTERN "*.h*")
Je ne pense pas que votre solution soit la bonne. /usr/include
doit être réservé à votre fournisseur pour y mettre des fichiers.
La bonne chose à faire IMO est d'installer l'en-tête dans /usr/local/include
, puis demandez à l'utilisateur de export CPATH="/usr/local/include:${CPATH}"
.
Il semble /usr/local/lib
a été recherché automatiquement mais si vous souhaitez utiliser un autre répertoire export LIBRARY_PATH="/usr/local/lib:${LIBRARY_PATH}"
fonctionne de manière similaire pour le binaire .a (mais peut ou peut ne pas fonctionner correctement pour les bibliothèques partagées selon votre système d'exploitation).
Facultativement, mais plus lourd consiste à ajouter -I /usr/local/include
et -L /usr/local/lib
lors de la compilation.
C'est une réponse quelque peu subjective, mais cela a bien fonctionné pour moi.