Как изменить порядок в CXXLINK от AutoMake?

Я пытаюсь скомпилировать простую программу на C++ с помощью инструментов automake. Сами по себе automake создает в своем Makefile строку: CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@

Таким образом, однако, я получаю некоторые ошибки компоновщика, которые могут быть решены, просто поместив -o example example.cpp часть в начале команды g++ вместо конца.

Как я могу поручить автопроизводителю поставить -o example example.cpp перед компоновщиком команд?

Здесь Makefile.am

bin_PROGRAMS = GLTest

GLTest_SOURCES = main.cpp

AM_CXXFLAGS=@gllibs_CFLAGS@ -std=c++11 -pthread
AM_LDFLAGS=@gllibs_LIBS@ -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr

Вот ошибки компоновщика:

g++ -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr  -o GLTest main.o  
main.o: In function `main':
main.cpp:8: undefined reference to `glfwInit'
main.cpp:9: undefined reference to `glfwWindowHint'
main.cpp:10: undefined reference to `glfwWindowHint'
main.cpp:11: undefined reference to `glfwWindowHint'
main.cpp:12: undefined reference to `glfwWindowHint'
main.cpp:14: undefined reference to `glfwCreateWindow'
collect2: error: ld returned 1 exit status

Они решаются, когда я компилирую его вручную следующим образом:

g++ -o GLTest main.cpp -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr

2 ответа

Решение

Из команды компоновщика в выводе выглядит, что вы не используете libtool,

Попробуйте добавить AM_PROG_LIBTOOL к configure.ac,

Ты делаешь это неправильно. Проблема в том, что вы передаете библиотеки как LDFLAGSи это неверно.

У тебя должно быть

GLTest_LDADD = $(gllibs_LIBS)

так что вы говорите automake правильно, что это библиотеки.

Использование libtool может работать, в зависимости от используемой версии libtool, так как он может сортировать командную строку, но это все равно неправильно, и в других ситуациях происходит сбой.

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