Возникла проблема.
проект разросся и время компиляции сильно возросло.
раньше для проекта использовал makefile, где все компилировалось "скопом" без учета того, изменен ли был файл или нет.
теперь решил сделать все по-человечески и взялся за написание makefile на пробной задаче.
читал как делать это тут
http://linux.yaroslavl.ru/docs/prog/gnu_make_3-79_russian_manual.html
вот мой makefile
TARGET=hello.x
COMPILER=ifort
CFLAGS=-O3
COMPIL=$(COMPILER) -c $(CFLAGS)
OBJS= db.o hello.o hello1.o hello2.o hello3.o
EX=f90
$(TARGET): $(OBJS)
$(COMPILER) $(CFLAGS) $(OBJS) -o $(TARGET)
db.o:
$(COMPIL) db.$(EX)
hello.o: db.o hello3.o
$(COMPIL) hello.$(EX)
hello1.o: db.o
$(COMPIL) hello1.$(EX)
hello2.o: db.o
$(COMPIL) hello2.$(EX)
hello3.o: db.o
$(COMPIL) hello3.$(EX)
clean:
rm *.o
rm *.mod
db.f90 - файл, в котором написан модуль с переменными для всех остальных файлов.
hello3.f90 - файл, в котором написана функция, вызываемая из hello.f90
вот и все зависимости.
если я меняю что-то в файлах и пишу make, то мне выдается ответ:
make: `hello.x' не требует обновления.
хотя изменения внесены.
удаляю hello.x
он снова пересобирается из существующих объектных файлов без перекомпилирования изменившихся файлов.
для ускорения компиляции проекта я хотел бы составить ряд зависимостей и компилировать только те файлы, которые зависят от измененного файла.
подскажите где я неправ в makefile или подскажите как добится решения проблемы.
Примечание:
если что, то табуляции там стоят перед командами.
Примечание:
ckpunTkuDDuc,
спасибо, что откликнулись
должно быть так
$(TARGET): $(OBJS)
$(COMPILER) $(CFLAGS) $(OBJS) -o $(TARGET)
db.o: db.$(EX)
$(COMPIL) db.$(EX)
hello.o: db.$(EX) hello3.$(EX)
$(COMPIL) hello.$(EX)
hello1.o: db.$(EX)
$(COMPIL) hello1.$(EX)
hello2.o: db.$(EX)
$(COMPIL) hello2.$(EX)
hello3.o: db.$(EX)
$(COMPIL) hello3.$(EX)
?
Примечание:
то есть линковать он будет каждый раз?
Примечание:
последний вопрос:
%.o: %.$(EX)
$(COMPILER) -c $(CFLAGS) $< -o $@
что значит "$< -o $@" ?
Примечание:
Огромное спасибо!
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.