J'ai un petit projet avec un Makefile que j'essaie de convertir en CMake, principalement juste pour acquérir de l'expérience avec CMake. Pour les besoins de cet exemple, le projet contient un fichier source (C ++, bien que je ne pense pas que le langage soit particulièrement pertinent) et un fichier de bibliothèque statique que j'ai copié ailleurs. Supposons pour les arguments que le code source de la bibliothèque n'est pas disponible; Je n'ai que le fichier .a et l'en-tête correspondant.
Mon Makefile fait à la main contient cette règle de construction:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
qui fonctionne très bien. Comment dire à CMake de reproduire cela? Pas littéralement ce makefile exact, bien sûr, mais quelque chose qui inclut une commande de liaison équivalente. J'ai essayé les moyens évidents mais naïfs, comme
add_executable(main main.cpp libbingitup.a)
ou
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
ainsi que diverses choses avec link_directories(.)
ou add_library(bingitup STATIC IMPORTED)
etc., mais rien à ce jour qui aboutisse à un lien réussi. Que dois-je faire?
Détails de la version: CMake 2.8.7 sous Linux (Kubuntu 12.04) avec GCC 4.6.3
la source
target_include_directories
ouinclude_directories
(le premier est le moyen préféré car il est plus spécifique).Si vous ne souhaitez pas inclure le chemin complet, vous pouvez faire
bingitup
est le même nom que vous donneriez à une cible si vous créez la bibliothèque statique dans un projet CMake:CMake ajoute automatiquement le
lib
à l'avant et.a
à la fin sous Linux, et.lib
à la fin sous Windows.Si la bibliothèque est externe, vous pouvez ajouter le chemin d'accès à la bibliothèque en utilisant
la source
J'ai trouvé cela utile ...
http://www.cmake.org/pipermail/cmake/2011-June/045222.html
De leur exemple:
la source