2016-10-09 1 views
2

Je suis actuellement en train de porter mon projet C++ pour utiliser la chaîne d'outils GNU autotools, et j'ai des problèmes pour configurer les dépendances de ma bibliothèque. Ce qui semble se produire est qu'il donne la commande ar drapeaux destinés à g ++, tels que -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2.Autotools ajoute des drapeaux de bibliothèque à ar

Voici le code pour src/Makefile.am:

noinst_LIBRARIES = libccade.a 
libccade_a_SOURCES = CCade.h CCade_graphics.h CCade_graphics.cpp CCade_util.h CCade_util.cpp 
libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS) 
libccade_a_CFLAGS = $(libsdl2_CFLAGS) $(libsdl2_image_CFLAGS) 

Voici ce que make met à:

ar cru libccade.a CCade_graphics.o CCade_util.o -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2 
ar: invalid option -- 'L' 
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file... 
...(more documentation on ar)... 

Il semble ajouter les args de libccade_a_LIBADD, mais si je retire cette variable, il wouldn Ne donnez pas les drapeaux à g++. Que fais-je?

Répondre

2

Il semble que vous n'utilisiez pas libtool. Ce que je fais en général est mis dans mon configure.ac:

AM_PROG_LIBTOOL 

Et puis mon Makefile.am serait quelque chose comme:

noinst_HEADERS = CCade.h CCade_graphics.h CCade_util.h 

noinst_LTLIBRARIES = libccade.la 

libccade_la_SOURCES = CCade_graphics.cpp CCade_util.cpp 
libccade_la_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS) 
libccade_la_CPPFLAGS = $(libsdl2_CFLAGS) $(libsdl2_image_CFLAGS) 

Faire en sorte que la deuxième variable est noinst_ LT BIBLIOTHÈQUES, il devrait travailler pour vous.

+0

J'ai essayé de suivre votre solution, et même si je crois que je suis un peu plus près, j'ai toujours la même erreur. –

+0

@MathManiac Avez-vous ** remplacé ** votre code par mon code ou votre code est-il toujours là? – Galik

+1

* EDIT: * Attendez .. Je me suis rendu compte que vous avez ajouté "LT" sur la deuxième variable. Changer cela maintenant .. –

0

Qu'est-ce que vous attendez de cette ligne à faire ?:

libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS) 

ar ne pas faire de liaison, il ne se soucie pas d'autres bibliothèques, donc il n'y a pas besoin de les préciser ici.