Make-файл

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Zxc
Сообщения: 1

Make-файл

Сообщение Zxc »

Пытаюсь скомпилировать мейком две проги с модулями, однако в упор не могу сделать им объектные файлы в не-текущей директории

Сам мейк
Spoiler
files=$(wildcard *.f90 dir/*.f90)
main : $(patsubst %.f90, %.o, $(files))
-------gfortran $^ -o $@
dir/%.0 : dir/%.f90
-------gfortran -c $^
clear :
-------rm -f *.o main
result : main
-------./main > result
Цель задания
Spoiler
Сборка и исполнение двух программ (prog1 и prog2) из нескольких модулей (f1 f2 f3 f4), все модули в директории /dir, не текущей. Объектные файлы и программы должны создаваться в той же директории, что и модули + сделать правило оглавления этой директории.
И как бы всё хорошо и всё должно работать, но почему оно не создаёт исполнимый файл в директории, если это указано?

Shell

$ make
gfortran -c dir/f4.f90
gfortran -c dir/f1.f90
gfortran -c dir/f3.f90
gfortran -c dir/f2.f90
gfortran prog1.o prog2.o dir/f4.o dir/f1.o dir/f3.o dir/f2.o -o main
gfortran: error: dir/f4.o: Нет такого файла или каталога
gfortran: error: dir/f1.o: Нет такого файла или каталога
gfortran: error: dir/f3.o: Нет такого файла или каталога
gfortran: error: dir/f2.o: Нет такого файла или каталога
make: *** [makefile:3: main] Ошибка 1
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Make-файл

Сообщение serzh-z »

Наверное, потому что при компиляции .f90 нужно указывать `-o $@`. Ну и '.0' - это не '.o'.
Спасибо сказали:
Ответить