2010-11-22 2 views
7

Я пытаюсь использовать Autotools для создания моей программы на C, которая должна быть связана с определенными библиотеками. Он содержит только один исходный файл C.Флаги компоновщика в неправильном месте

Это Makefile.am с ним связано:

bin_PROGRAMS=game 
game_SOURCES=main.c 
game_CFLAGS=`pkg-config --cflags libglfw` 
game_LDFLAGS=`pkg-config --libs libglfw` 

Когда я бегу сделать, он пытается скомпилировать его с помощью этого:

gcc `pkg-config --cflags libglfw` -g -O2 `pkg-config --libs libglfw` -o game game-main.o 

Однако это неверно, так как ссылка библиотеки флаги должны быть в конце, иначе они будут давать ошибки о неопределенных ссылках. Например, если я запускаю это:

gcc `pkg-config --cflags libglfw` -g -O2 -o game game-main.o `pkg-config --libs libglfw` 

Он компилируется в порядке.

Как я могу сделать так, чтобы основной LDFLAGS был добавлен в конце, а не в середине?

ответ

10

Вы можете начать, не злоупотребляя LDFLAGS для библиотек. LDFLAGS для компоновщика флаги. Для отображения библиотек ссылок используйте foo_LDADD (для исполняемых файлов) или foobar_LIBADD (при создании библиотеки).

Кроме того, запуск pkg-config внутри Makefile.am является ненужным и расточительным. Просто используйте:

 
game_CFLAGS = ${libglfw_CFLAGS} 
game_LDADD = ${libglfw_LIBS} 

libglfw_CFLAGS,LIBS населен это в configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

+0

Как бы решить эту проблему с регулярным Makefile, а не Autotools? Насколько я могу судить, make не уважает LDADD (просто autotools). –

+1

Последующие действия: при использовании обычных make-файлов решение должно использовать 'LOADLIBES = -lm', а не' LDFLAGS = -lm'. –

Смежные вопросы