“Pas de règle pour faire de cible” erreur dans cmake lors de la liaison à la bibliothèque partagée
Dans Ubuntu, j'ai téléchargé un tiers de la bibliothèque partagée, mylibrary.so
, que j'ai placé dans le répertoire /home/karnivaurus/Libraries
. J'ai également placé les associés fichier d'en-tête, myheader.h
, dans le répertoire /home/karnivaurus/Headers
. Maintenant, je veux le lien de cette bibliothèque dans mon code C++, en utilisant cmake. Voici mon CMakeLists.txt fichier:
cmake_minimum_required(VERSION 2.0.0)
project(DemoProject)
include_directories(/home/karnivaurus/Headers)
add_executable(demo demo.cpp)
target_link_libraries(demo /home/karnivaurus/Libraries/mylibrary)
Cependant, cela me donne le message d'erreur:
:-1: error: No rule to make target `/home/karnivaurus/Libraries/mylibrary', needed by `demo'. Stop.
Ce qu'il se passe?
1. Avez-vous vraiment besoin de soutien CMake ancienne 2.0? 2. Ne devrait pas le nom de la bibliothèque sur le disque
Si j'ajoute le
Vous pouvez lier la bibliothèque manuellement, c'est à dire dans un projet de ne pas utiliser CMake? Si oui, quelle ligne de commande réalise que? Il pourrait être possible de déduire la CMake syntaxe de cette. Je crois toujours que le nom de la bibliothèque ne suivent pas les conventions Linux, mais.
Êtes-vous manque un add_library appel?
Ne pas
libmylibrary.so
? Si elle ne l'est pas, vous pourriez essayer d'ajouter de la .so
extension de target_link_libraries()
, il pourrait aider unconfuse.Si j'ajoute le
.so
extension, il me donne l'erreur: cannot find -lmylibrary
Vous pouvez lier la bibliothèque manuellement, c'est à dire dans un projet de ne pas utiliser CMake? Si oui, quelle ligne de commande réalise que? Il pourrait être possible de déduire la CMake syntaxe de cette. Je crois toujours que le nom de la bibliothèque ne suivent pas les conventions Linux, mais.
Êtes-vous manque un add_library appel?
Ne pas
add_library
construire une nouvelle bibliothèque à partir de la source? J'ai déjà donné compilé mylibrary.so
fichier...OriginalL'auteur Karnivaurus | 2014-11-07
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un chemin d'accès complet à la bibliothèque statique. Faire un lien w/dynamique, de mieux utiliser
link_directories()
comme ceci:et assurez-vous que
mylibrary
a préfixelib
et le suffixe.so
dans un nom de fichier (c'est à dire le nom complet est/home/karnivaurus/Libraries/libmylibrary.so
).Pour vous rendre le projet plus flexible, vous feriez mieux d'écrire un finder module et d'éviter de coder en dur les chemins comme
/home/karnivaurus/*
souvent juste avoir un chemin d'accès à un fichier n'est pas suffisant. pour plus de sérieux projets, il est préférable d'apprendre inventeurs et comment les écrire.
Ce n'est pas votre suggestion.
OriginalL'auteur zaufi