2016-10-15 2 views
0

Мне нужно сделать программу из некоторых фиксированных и бесплатных файлов, включая некоторые модули. Я добавил инструкцию all в начало make-файла. Затем мне нужно скомпилировать несколько файлов .f90 (они содержат несколько модулей). И затем я добавил правило для компиляции файлов .f.Makefile из фиксированных форм и свободных файлов Fortran

Когда я бежал, попробуйте сначала скомпилировать файлы .f. Что нужно изменить/добавить?

Я использую gfortran как компилятор.

Makefile выглядит следующим образом:

All: exename 

Firstf90.o: Firstf90.f90 
<tab>gfortran -c $< 
Secondf90.o: Second.f90 
<tab>gfortran -c $< 
%.o: %.f 
<tab>gfortran -c $^ 

exename: *.o 
<tab>gfortran -o exename $^ 
+0

Возможно, вам потребуется включить ваш make-файл, чтобы люди могли лучше понять вопрос. вы пытались удалить файлы .f? Часто они создаются из .for файлов, если у вас есть D-линии или #ifdef в смысле препроцессора. – Holmz

+0

К сожалению, добавлен пример –

+0

Эти файлы оригиналы, никаких инструкций в препроцессоре. –

ответ

1

С линии:

exename: *.o 

Вы говорите, что makeexename зависит от всех файлов с расширением .o. Но пока вы не создадите свой первый файл .o, их нет, а это значит, что make думает, что это ни на что не зависит.

Досадно, что после того, как будут существовать объектные файлы, этот Makefile выполняет именно то, что вы ожидаете, что затрудняет уведомление о том, что с ним что-то не так.

попробовать что-то вроде этого:

FIXED_SOURCES = $(wildcard *.f) 
FREE_SOURCES = $(wildcard *.f90) 
FIXED_OBJECTS = $(patsubst %.f,%.o,${FIXED_SOURCES}) 
FREE_OBJECTS = $(patsubst %.f90,%.o,${FREE_SOURCES}) 

all : exename 

${FIXED_OBJECTS} : %.o : %.f 
<tab>gfortran -o [email protected] -c $^ 

${FREE_OBJECTS} : %.o : %.f90 
<tab>gfortran -o [email protected] -c $^ 

exename : ${FIXED_OBJECTS} ${FREE_OBJECTS} 
<tab>gfortran -o [email protected] $^ 

Примечание: Обычно я проверить его, прежде чем отправлять его, но я не могу в данный момент. Кроме того, у кого-то может быть более краткий Makefile для вас.

+0

Большое вам спасибо! Он работает сейчас. –

0

Когда я бежал, попробуйте сначала скомпилировать файлы f.

Это проблема? Если вам необходимо скомпилировать их определенным образом, то есть из-за модулей вы можете добавить зависимости к Makefile. Скажем mymod.f90 создает модуль, который используется prog.f90. Поэтому вам нужно скомпилировать mymod.f90, прежде чем вы сможете скомпилировать prog.f90. Просто: Добавьте эту строку в Makefile:

prog.o : mymod.o 

Объявляет mymod.o является необходимым условием для prog.o, а это означает, что перед prog.o компилируется, первый mymod.o проверяется, существует ли оно и до настоящего времени.

+0

И чистый раздел для удаления файлов .o .mod и .lib ... и т. Д.. Если вы очистите, а затем сделайте все свежее. – Holmz

Смежные вопросы