Есть ли что-то явно неправильное в этом make-файле или же ошибка лежит где-то еще?
В этом make-файле есть две вещи.
Вещь 1
LDFLAGS=-L$(FLTK_BIN)/lib
LDLIBS=-lfltk
Вы обычный GNU Make настройки опций подъёмник:
LDFLAGS=-L$(FLTK_BIN)/lib
$(LDFLAGS)
должно происходить в соответствующем положении в рецепте связи сказать компоновщик, что он следует искать в каталоге $(FLTK_BIN)/lib
для любых библиотек, указанных в параметре -l
(bef руда поиск в своих каталогах по умолчанию).
LDLIBS=-lfltk
$(LDLIBS)
должно происходить в соответствующем положении в рецепте связи сказать компоновщик, что он должен связать общую библиотеку libfltk.so
или если это невозможно, статическую библиотеку libfltk.a
. (В Windows принимаются другие расширения ).
Ваш рецепт связь:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected]
имеет $(LDFLAGS)
в соответствующем положении, но не имеет $(LDLIBS)
в любом месте. Поэтому компоновщик не пытается связать libfltk
. Скорее всего, это объясняет неопределенные ссылочные ошибки, о которых вы говорите, , хотя я не могу быть абсолютно уверен, так как вы не обнаружили, что они собой представляют.
Соединительное рецепт должен быть:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] $(LDLIBS)
или более традиционно:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $^ -o [email protected] $(LDLIBS)
Thing 2
Ваш рецепт компиляции:
.$(EXT).o:
$(CC) $(CFLAGS) $< -o [email protected]
на самом деле не рецепт компиляции. Это рецепт компиляции и ссылки. gcc/g++
всегда будет пытаться выполнить привязку, если параметры командной строки не включают -c
(= только компиляция). Так как рецепт (правильно) не содержит , любой из необходимых вариантов связи - $(LDFLAGS)
, $(LDLIBS)
- неудачная попытка соединения не удалась, и сборка не дошла. командной строки вы вошли как продуцирование ошибки сцепления:
g++ -std=c++14 -Wall -IC:/frameworks/fltk-1.3.4-1 -v src/hw.cc -o src/hw.o
подмены экземпляр вашего «компилировать» рецепт:
$(CC) $(CFLAGS) $< -o [email protected]
и не рецепт сцепления:
$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected]
Чтобы исправить рецепт компиляции, сделайте это:
$(CC) $(CFLAGS) $< -c -o [email protected]
The GNU Make documentation хорошее.
Последующие ваши разумные советы, но ошибок по-прежнему изобилует. См. [Link] (http://pastebin.com/2tr3CuRg) –
@slimandstacked Пожалуйста, опубликуйте полный вывод ошибки, а не только ошибки. –
[Журнал] (http://pastebin.com/xr8GjcX6) –