2017-02-10 4 views
0

Débutant essayer de comprendre l'ensemble compliling + liant l'entreprise. Pourquoi ne puis-je pas construire mon programme C++ en utilisant la bibliothèque CGAL comme d'habitude et que j'ai besoin d'utiliser CMake pour le construire?Pourquoi ai-je besoin de construire mon programme C++ en utilisant CGAL avec CMake?

question supplémentaire: puis-je construire en utilisant CMake dans un IDE? (Par exemple Code :: Blocks?)

@ Mike: Eh bien ce que je suis arrivé à la lecture CGAL documentation. Ai-je mal compris quelque chose?

+2

[Ceci] (https://cmake.org/about/) explique ce qu'est CMake. Cela ne répond pas, pourquoi n'importe quel auteur de bibliothèque a choisi de l'utiliser, mais il vous dit, à quoi ça sert. CMake est compatible avec certains IDE. Code :: Blocks est un IDE que vous devriez éviter pour de nombreuses raisons. – IInspectable

+1

Qu'est-ce qui vous fait croire que vous devez utiliser CMake pour construire un programme qui soit lié à libCGAL? (Ajoutez cette information au corps de votre question) –

Répondre

1

Vous avez été induits en erreur par un peu la documentation CGAL vous faites référence à.

Les développeurs CGAL ont choisi CMake que le système de construction pour le paquet source CGAL . C'est un système de construction populaire (prééminent pour la portabilité multiplateforme). Ils illustrent également le bâtiment de leurs programmes d'exemple avec CMake; naturellement, puisque les exemples font partie du paquet source. Ils recommandent également que vous utilisiez CMake pour créer vos propres programmes qui dépendent de CGAL.

Il est assez juste pour eux de recommander CMake et pas étonnant qu'ils le fassent. Cependant: Lorsque vous voulez écrire un programme qui dépend de n'importe quelle bibliothèque - - vous supposez que libfoo est déjà installé prêt pour utilisez dans votre projet. Ce qui signifie:

  • Les fichiers d'en-tête libfoo - foo.h, quelle que soit - qui définissent les interfaces de programmation de la bibliothèque sont sur votre système quelque part afin que votre compilateur peut trouver et les lire lorsque vous écrivez, par exemple #include <foo.h> dans votre code.

  • Les libfoo binaires - libfoo.a, libfoo.so, foo.lib, foo.dll, libfoo.dylib, selon le cas, être pour votre système d'exploitation - qui contiennent la mise en œuvre de la bibliothèque sont également quelque part sur votre système afin que votre éditeur de liens peut les trouver et liez-les avec le code objet de votre programme pour en faire un exécutable complet. (Et, dans le cas de bibliothèques dynamiques , un endroit où le chargeur d'exécution peut les trouver).

Ainsi, dans la mesure où la construction votre programme est concerné, il n'a pas d'importance du tout comment les fichiers d'en-tête libfoo et les binaires ont à être là où ils sont sur votre système , que ce soit mis là par CMake ou par des fées. Il importe seulement qu'ils soient là. Ensuite, vous pouvez construire votre programme avec CMake, si vous voulez, ou n'importe quel autre façon que vous aimez.

Bien sûr, il peut être le cas lorsque vous décidez d'écrire votre programme qui libfoo est pas déjà installé sur votre système. Dans ce cas, vous l'installez .Ensuite, poursuivez votre programme en supposant qu'il est installé

La bibliothèque CGAL et les fichiers d'en-tête doivent être installés. Cela serait normalement réalisé (Linux/OS X), en installant le paquet de développement libcgal fourni par votre système d'exploitation à l'aide de son gestionnaire de paquets, ou (Windows) en téléchargeant le et en exécutant le programme d'installation. Alors vous n'avez pas besoin de savoir ou de vous soucier comment CGAL est construit. Si vous ne parvenez pas à obtenir un package de développement pour une raison quelconque ou si vous êtes techniquement intéressé lors de l'installation de la bibliothèque "à partir des principes premiers", vous devez créer et l'installer à partir d'un package source. Comme le système de compilation du paquet source est CMake, vous devrez apprendre à le créer et à l'installer avec CMake, et le faire.

Une fois CGAL est installé, à utiliser dans vos propres projets que vous avez seulement besoin de prendre soin des exigences de routine de l'utilisation d'une bibliothèque: -

  • Vous dites au compilateur où trouver l'en-tête de la bibliothèque fichiers, s'ils sont dans aucun de ses répertoires include par défaut.
  • Vous dites à l'éditeur de liens de lier la bibliothèque.
  • Vous indiquez à l'éditeur de liens où trouver la librairie, si ce n'est pas dans l'un de ses répertoires de recherche par défaut .

Que vous faites cela avec CMake, Scons, Autotools, un makefile, projet paramètres de votre IDE ou simplement en cours d'exécution de votre compilateur et éditeur de liens à l'invite de commande avec les bonnes options est entièrement votre choix. (Bien que le dernier est le le plus efficacement instructif, quand vous êtes un débutant essayant de comprendre l'ensemble des affaires de compilation et de liaison). Les exemples de programmes CGAL peuvent être construits avec Code :: Blocks en tant que projets simples simples avec des dépendances de bibliothèque, à condition que vous ayez préalablement installé CGAL .

+0

Notez que pour CGAL, cmake passera également des drapeaux supplémentaires ('-frounding-math' pour gcc) qui peuvent être nécessaires pour que le compilateur génère le code correct, il liera aussi (et ajouter des chemins d'en-tête) avec quelques dépendances (boost, gmp, ...). Il compilera des exemples en utilisant un ABI compatible avec celui utilisé pour la bibliothèque (cela concerne les plateformes où les binaires de débogage ne sont pas compatibles avec les binaires de version). En effet, tout cela peut être fait à la main, mais la liste complète des options requises n'est pas encore documentée par CGAL et est un peu plus long que les indicateurs -I et -l. –

0

Vous pouvez passer les blocs de code générateur sur la ligne de commande lorsque vous invoquez CMake. Il va créer les fichiers que vous devez utiliser et construire avec votre ide.