2016-10-09 1 views
2

В настоящее время я переношу свой проект на C++, чтобы использовать инструментальную цепочку GNU autotools, и у меня возникли проблемы с настройкой зависимостей между библиотеками. Что, кажется, происходит, так это то, что он дает команду ar флаги, предназначенные для g ++, такие как -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2.Autotools добавляет флаги библиотеки для ar

Вот код 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) 

Вот что make тушит:

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)... 

Это, кажется, добавляя арг из libccade_a_LIBADD, но если я удалю эту переменную, то она Wouldn 't дать флаги g++. Что я делаю?

ответ

2

Похоже, вы не используете libtool. То, что я вообще сделать, это положить это в моем configure.ac:

AM_PROG_LIBTOOL 

И тогда мой Makefile.am будет что-то вроде:

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) 

Убедившись, что вторая переменная noinst_ LT БИБЛИОТЕКИ, его должен работать на вас.

+0

Я пробовал следовать вашему решению, и, хотя я считаю, что я на шаг ближе, я все равно получаю ту же ошибку. –

+0

@MathManiac Вы заменили ** свой код моим кодом или ваш код все еще там? – Galik

+1

* EDIT: * Wait .. Я понял, что вы добавили «LT» во вторую переменную. Теперь это изменилось. –

0

Что вы ожидаете эта линия, чтобы сделать ?:

libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS) 

аги не делать какую-либо ссылки, он не заботится о других библиотеках, поэтому нет необходимости указывать их здесь.