2 votes

Comment faire en sorte qu'une bibliothèque compile ses en-têtes

J'ai une question à poser :

Je suis en train de créer une bibliothèque de ce type :

myLibrary.h

class MyLibrary{

public:
    MyLibrary(int);

private:

    int myInt;
}

myLibrary.cpp

#include "myLibrary.h"

MyLibrary::MyLibrary(int i){
    this->myInt = i;
}

main.cpp

#include "myLibrary.h"

int main(){
    MyLibrary library(10);
}

Si je fais maintenant mon Makefile comme ceci :

all:
    g++ -o library.o -c myLibrary.cpp
    g++ -o main.o -c main.cpp

    g++ -o main.out main.o library.o

tout fonctionne, mais comment faire pour que, lorsque je fournis cette bibliothèque à quelqu'un d'autre pour qu'il l'utilise dans son code, il n'ait qu'à taper dans son programme #include "myLibrary.h" et c'est tout. Donc je ne veux pas l'obliger à taper tous les appels g++ pour chaque fichier c++ de ma bibliothèque dans son makefile, est-ce qu'il y a un moyen d'inclure un makefile dans un autre makefile ou quelque chose comme ça ?

Je sais que cette question peut sembler stupide, mais je vous serais reconnaissant de bien vouloir m'aider.

3voto

Yunnosch Points 11189

Vous n'obligez pas la bibliothèque à compiler ses en-têtes.
Les en-têtes ne sont pas compilés, mais les fichiers de code source le sont, ils incluent les en-têtes.

Et vous ne pouvez pas faire en sorte qu'un utilisateur de votre bibliothèque "n'ait qu'à taper son programme". #include "myLibrary.h" et c'est tout", c'est impossible.
Comme vous l'avez probablement appris lorsque vous utilisez une bibliothèque non standard (c'est-à-dire une bibliothèque qui n'est pas fournie avec votre chaîne d'outils/compilateur), vous devez configurer votre projet de manière à ce que l'éditeur de liens utilise la partie binaire de la bibliothèque.
Il serait même possible, à proprement parler, d'utiliser la bibliothèque (si elle est liée) SANS en-tête, à condition de déclarer manuellement les prototypes nécessaires, etc. Ce n'est pas judicieux, mais c'est possible.

Votre fichier makefile montre que vous ne créez PAS de bibliothèque, vous construisez simplement un programme à partir de deux fichiers de code source, l'un d'entre eux ayant ses déclarations dans un en-tête.

Désolé de le dire, mais ce que vous essayez probablement de faire, créer une bibliothèque (partagée, dll, statique, etc.) pour la réutiliser, est plus complexe. Je vous recommande de chercher "creating a XXXX library", XXXX étant le type de bibliothèque. Expliquer les différences et la manière de créer les différents types est trop complexe pour être abordé ici en aparté et dépasse la réponse à la question telle qu'elle est posée.

Veuillez comprendre que je considère la clarification de ce que je considère comme vos malentendus pertinents comme une réponse à votre question et que le "comment faire" est à mon avis une question différente et déjà répondue ailleurs.

Toutefois, le commentaire de l'utilisateur "bloody" a permis de recueillir des informations pertinentes :
Si vous ne pensez pas au type de bibliothèques que j'ai mentionné ci-dessus et que vous considérez la combinaison d'un fichier d'en-tête et d'un fichier qui n'a pas besoin d'être compilé, alors vous avez pratiquement déjà terminé avec ce que vous avez montré. Si vous fournissez le fichier "library.o" résultant de la compilation de votre "myLibrary.cpp", alors l'utilisateur peut l'utiliser comme vous l'avez fait dans la dernière ligne du makefile montré. Cela pourrait être considéré comme une bibliothèque statique.
( Strictement parlant, il ne correspond cependant pas vraiment à votre description "il suffit de taper dans son programme". #include "myLibrary.h" et c'est tout". )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X