2013-12-13 32 views
0

所以我可以編譯我的代碼(fftw_ex.c)直接:Makefile for fftw3?

login$ gcc -o -g fftw_ex fftw_ex.c -I$TACC_FFTW3_INC -L$TACC_FFTW3_LIB -lfftw3 

然而,我的教授更是我們使用的Makefile。我只是在學習如何使用Makefile,並且在創建Makefile時遇到了麻煩。到目前爲止,這是我所:

#      RULES 

    EXEC := fftw_ex 
    SRC := $(wildcard *.c) 
    OBJ := $(patsubst %.c,%.o,%(SRC)) 

    #      OPERATIONS 

    CC := gcc 
    CFLAGS := -O3 -I$TACC_FFTW3_INC 
    LDFLAGS := -L$TACC_FFTW3_LIB 
    LDLIBS := -lfftw3 

    $(EXEC): $(OBJ) 
      $(CC) $(LDFLAGS) $(LDLIBS) -o -g [email protected] $^ 

    %.o: %.c 
      $(CC) $(CFLAGS) -c $< 

    #     PHONY TARGETS 

    .PHONY: clean 

    clean: 
      @echo Cleaning...;rm -rf *.o fftw_ex 

我知道有與SRC線路有問題,因爲我得到的錯誤信息:

make: *** No rule to make target `%(SRC)', needed by `fftw_ex'. Stop. 

任何幫助來得到這個工作會不勝感激。

回答

0

1)要解決: 沒有規則,使目標`%(SRC)」 在 OBJ替換%(SRC):= $(patsubst%.C,‰, - %(SRC)) 與$(SRC)

2)行: $(CC)$(LDFLAGS)$(LDLIBS)-o -g $ @ $^

你有錯誤:-o -g,應該是 - g -o

+0

謝謝,現在大多是固定的。雖然現在我收到一條錯誤消息,說明找不到-lfftw3。但它直接編譯好就好了。 –