Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Makefile и include

На основе ответов, cпасибо вам, сделал такой вот скрипт:
CPP = $(shell find "cpp/" -name "*.cpp")
DFILE = dependence.d Programm: $(patsubst %.cpp, %.o, $(CPP)) g++ -MM $(CPP) >$(DFILE) g++ -o Programm $(patsubst %.cpp, %.o, $(CPP)) %.o: %.cpp g++ -c -o $@ $^ include $(DFILE)
Но он не ведет учет зависимостей, которые находятся в DFILE, а они есть там, генерация проходит верно. Как я неправильно пользуюсь include?
1 Узнаю все файлы в cpp/*.cpp
3 Объявляю переменную для хранения имени файла зависимости DFILE = dependence.d
4 Цель Programm, переименовываю сpp на o в строчке зависимостей
5 Генерация файла зависимостей
6 Сборка на основе прописанных зависимостей на 6той строке, все зависимости, для цели, выполнятся по правилу на 10той строке
Тк во время первой сборки файл пуст DFILE - никаких дополнительных зависимостей нет.
Во второй сборке, я изменил SubClass.h, все эти действия повторяются и должны быть учтены зависимости созданные при прошлой сборке - файл зависимостей не пуст, но этого у меня никак не получается. PS: Я в прогрессе сделаю отдельную цель Dependence, для обновления зависимостей, но мне бы с этим разобраться. Файл зависимостей:
SubClass.o: cpp/SubClass.cpp cpp/../h/SubClass.h \ cpp/../h/../h/SuperClass.h SuperClass.o: cpp/SuperClass.cpp cpp/../h/SuperClass.h Main.o: cpp/Main.cpp cpp/../h/SuperClass.h cpp/../h/SubClass.h \ cpp/../h/../h/SuperClass.h


Ответ

я бы порекомендовал отказаться от идеи раскладывать файлы по каталогам в зависимости от их суффикса: мне кажется, это плохая идея. но если «очень нужно», то вот makefile, который, надеюсь, выполняет именно то, что требуется:

CPP = $(wildcard cpp/*.cpp) objects = $(patsubst cpp/%.cpp,%.o,$(CPP)) DFILE = dependence.d
Programm: $(objects); g++ -o $@ $^
$(DFILE):; g++ -MM $(CPP) >$(DFILE)
%.o: cpp/%.cpp; $(COMPILE.cpp) $(OUTPUT_OPTION) $<
include $(DFILE)
сначала надо создать файл с зависимостями:
$ make dependence.d
а затем уже всё остальное:
$ make

Комментариев нет:

Отправить комментарий