Makefile не использует пути include / library? - PullRequest
4 голосов
/ 18 февраля 2012

Что ж, после 3 часов исследований я собираюсь сходить с ума, поэтому решил, что пришло время передать это новым глазам.

CXXFLAGS        = -g -Wall
OBJS            = main.o
PROG            = test
INCLUDES        = -I /usr/include/mysql -I /usr/local/include
LIBS            = -L /usr/lib/mysql -l libmysqlclient.so.15.0.0 -L /usr/local/lib -l libmysqlpp.so.3.1.0

all:            $(PROG)

${PROG}:        $(OBJS)
            $(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS)

clean:;         $(RM) -f $(PROG) core *.o

Что-то не так с путями включения,потому что я получаю сообщения об ошибках, что mysql_version.h не существует, когда он явно существует в /usr/include/mysql.

При проверке первой части из выходных данных он говорит:

g++ -g -Wall   -c -o main.o main.cpp

что заставляет меня думать, что я что-то отформатировал в Makefile неправильно (из-за лишних пробелов и отсутствия путей include / library).Однако я просмотрел десятки руководств и статей по Makefiles и опциям g ++ и ... без прогресса.

Я предполагаю, что это должно быть простым исправлением.Пожалуйста, помогите (вы чувствуете мое отчаяние?).

В другой заметке, считаете ли вы, что указание библиотеки необходимо?У меня все это прекрасно работало в XCode, но я пытаюсь перенести код на мой веб-сервер ... Makefile остановил весь прогресс, и я решил, что это то, чему я должен научиться.

1 Ответ

11 голосов
/ 18 февраля 2012

В вашем make-файле вы добавили директивы include на этап компоновки, а не на этап компиляции.

Линии

${PROG}:        $(OBJS)
            $(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS)

Скажите, чтобы сделать программу в $ {PROG} из объектных файлов в $ {OBJS}, вызвав компилятор в $ {CXX}, передавая включаемые папки (вместе с другими вашими аргументами). Вместо этого, для вашей переменной раздела, сделайте это:

INCLUDES        = -I /usr/include/mysql -I /usr/local/include
CXXFLAGS        = -g -Wall ${INCLUDES}
OBJS            = main.o
PROG            = test
LIBS            = -L /usr/lib/mysql -l libmysqlclient.so.15.0.0 -L /usr/local/lib -l libmysqlpp.so.3.1.0

Таким образом, ваши CXXFLAGS (которые используются на этапе компиляции) теперь должны получить ваши директивы include.

...