Флажок линкера находится в неправильном месте

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

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

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

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

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 был добавлен в конце, а не в середине?

1 ответ

Решение

Вы можете начать, не злоупотребляя 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])

Другие вопросы по тегам