#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 тогда можно не переписывать.
Комментариев нет:
Отправить комментарий