2015-11-30 487 views
2

我想用gfortran編譯這段代碼。Makefile導致`gfortran:錯誤:沒有這樣的文件或目錄`

的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如何更改我的makefile? – MPejic

+1

您的編輯實質上改變了問題並使給定的答案失效。我不認爲這是一個有效的編輯。您應該接受給定的答案,並用更新的makefile提出一個新問題。 –

回答

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

檢查我的編輯pease! – MPejic

相關問題