2015-11-30 1 views
2

Я пытаюсь скомпилировать этот код с gfortran.Makefile вызывает `gfortran: error: Нет такого файла или каталога`

Makefile:

# makefile for BIRRP 

FC = gfortran 
FCFLAGS = -g -fbounds-check 
FLFLAGS = -g -fbacktrace 
SRC = birrp.f coherence.f dataft.f diagnostic.f fft.f filter.f math.f rarfilt.f response.f rtpss.f utils.f weight.f zlinpack.f 

# "make" builds all 

PROGRAM = birrp 
all: $(PROGRAM) 
$(PROGRAM): $(SRC) 
    $(FC) $(FCFLAGS) [email protected] $< 

%.o: %.f 
    $(FC) $(FLFLAGS) -o [email protected] $^ 

clean: 
    rm -f *.o 

Это не работает

gfortran -g -fbounds-check birrp birrp.f 
gfortran: error: birrp: No such file or directory 
Makefile:13: recipe for target 'birrp' failed 
make: *** [birrp] Error 1 

Я использую gfortran компилятор. Я скопировал Makefile из моей другой программы.


После добавления -o:

FC = gfortran 
FCFLAGS = -g -c -fbounds-check 
FLFLAGS = -g -fbacktrace 
SRC = birrp.f coherence.f dataft.f diagnostic.f fft.f filter.f math.f rarfilt.f response.f rtpss.f utils.f weight.f zlinpack.f 

# "make" builds all 

PROGRAM = birrp 
all: $(PROGRAM) 

$(PROGRAM): $(SRC) 
    $(FC) $(FCFLAGS) -o [email protected] $< 

%.o: %.f 
    $(FC) $(FLFLAGS) -o [email protected] $^ 

clean: 
    rm -f *.o 

Теперь он просто компилирует

 gfortran -g -c -fbounds-check -o birrp birrp.f 

Почему?

+0

строке компиляции не включает в себя цель вывода. Он должен читать: gfortran -g -fbounds-check -o birrp birrp.f –

+0

@ P.Hinker Как изменить мой make-файл? – MPejic

+1

Ваше изменение существенно изменяет проблему и аннулирует данный ответ. Я не думаю, что это правильное редактирование. Вероятно, вы должны принять данный ответ и задать новый вопрос с обновленным make-файлом. –

ответ

2

gfortran интерпретирует birrp как источник-файл, но вы хотите его как outfile.

man gfortran 

говорит outfile задается параметром -o, так что ваша цель становится это:

$(PROGRAM): $(SRC) 
    $(FC) $(FCFLAGS) -o [email protected] $< 

Но это не решает всех проблем. В соответствии с GNU Make manual$< определяется первая зависимость и не все из них. Вы всегда хотите иметь весь список зависимостей, который будет $^.

Так что ваша цель становится это:

$(PROGRAM): $(SRC) 
    $(FC) $(FCFLAGS) -o [email protected] $^ 
+0

Проверьте мою правку! – MPejic