#g++ #make
Существует дерево файлов:
folder
|-src
|-myfile.cpp
|-myfile.h
|-bin
|-Makefile
Хочу написать Makefile так, чтобы компилировались файлы, находящиеся в каталоге src,
но объектные файлы создавались в текущем (в folder). А потом, чтобы они линковались
в один файл в каталог bin.
На данный момент имею нерабочий Makefile. Ругается на отсутствие правила для myfile.o.
TARGET=myfile
OBJECTS=myfile.o
XX=g++
CXXFLAGS=-std=c++11
all: ${TARGET}
${TARGET}: ${OBJECTS}
${XX} -o ${TARGET} ${OBJECTS}
.c.o:
${XX} ${CXXFLAGS} -c "${INCLUDE}$<" -o "$@"
Как правильно реализовать поставленную задачу?
Ответы
Ответ 1
чтобы они линковались в один файл в каталог bin значит, собирать вам надо не myfile, а bin/myfile. это я про переменную TARGET. объектные файлы создавались в текущем так и укажите цель и пререквизиты соответствующим образом: %.o: src/%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $(OUTPUT_OPTION) $< здесь вторая строка, рецепт, взята из implicit rules, которые можно посмотреть в выводе команды make -p остаётся только объяснить компилятору, где искать заголовочный файл myfile.h (если, конечно, компилятор сам не «догадается»). тут я, как не-программист, вряд ли чем помогу. разве что предположу, что надо добавить к значению перменной CPPFLAGS или CXXFLAGS опцию -I src.Ответ 2
Gnu make имеет интересную директиву vpath, которая позволяет указать где искать те или иные исходники. В вашем случае достаточно добавить в начало Makefile: vpath %.cpp src vpath %.h src CXXFLAGS+=-Isrc И implicit rules тогда можно не переписывать.
Комментариев нет:
Отправить комментарий