Comment dois-je dire à CMake le lien dans une bibliothèque statique dans le répertoire source?
J'ai un petit projet avec un Makefile qui je suis en train de convertir à CMake, la plupart du temps simplement pour acquérir de l'expérience avec CMake. Pour les fins de cet exemple, le projet contient un fichier source C++ (C++, mais je ne pense pas que la langue est particulièrement pertinent) et une bibliothèque statique fichier que j'ai copié à partir d'ailleurs. Supposons pour la commodité du raisonnement que le code source de la bibliothèque n'est pas disponible; je n'ai que la .un fichier et de l'en-tête correspondant.
Ma main Makefile contient cette règle de génération:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
qui fonctionne très bien. Comment dois-je dire à CMake pour reproduire ce? Pas littéralement exacte de ce makefile, bien sûr, mais quelque chose qui comprend un équivalent de liaison de commande. J'ai essayé d'évident, mais naïf, 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 d'aussi loin que les résultats dans un lien réussi entre. Que dois-je faire?
Version de détails: CMake 2.8.7 sur Linux (Kubuntu 12.04) avec GCC 4.6.3
Vous devez vous connecter pour publier un commentaire.
CMake favorise passant le chemin d'accès complet de bibliothèques de liens, donc en supposant libbingitup.un est en
${CMAKE_SOURCE_DIR}
, procédant de la manière suivante doit réussir:target_include_directories
ouinclude_directories
(l'ancien est préférable car il est plus précis).target_include_directories
- je suis d'accord que cela n'a aucun sens de passer des fichiers de la bibliothèque que dans l'appel.J'ai trouvé ce utile...
http://www.cmake.org/pipermail/cmake/2011-June/045222.html
De leur exemple:
Si vous ne voulez pas inclure le chemin d'accès complet, vous pouvez le faire
bingitup
est le même nom que vous souhaitez donner une cible, si vous créez la bibliothèque statique dans un CMake projet:CMake ajoute automatiquement le
lib
et la.a
à l'avant sur Linux, et.lib
à la fin sur Windows.Si la bibliothèque est externe, vous pouvez ajouter le chemin d'accès à la bibliothèque en utilisant