В настоящее время я портирую свой проект C ++ на использование набора инструментов GNU autotools, и у меня возникают проблемы с настройкой зависимостей библиотеки. Кажется, что происходит то, что это дает команду ar
флаги для g ++, такие как -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2
,
Вот код для 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
, но если я удалю эту переменную, то это не даст флаги g++
, Что я делаю?
Похоже, вы не используете 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БИБЛИОТЕКИ, это должно работать для вас.
Что вы ожидали от этой линии?
libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
ar не делает никаких ссылок, не заботится о других библиотеках, поэтому нет необходимости указывать их здесь.