所以我使用的是FFTW 3.3.3。在尝试从Makefile调用make时,我遇到了这个问题:
/usr/bin/ld: cannot find -lfftw3
collect2: ld returned 1 exit status
make: *** [fftw_ex] Error 1
我之前使用以下代码编译了我的代码:
gcc -o fftw_ex fftw_ex.c -I$TACC_FFTW3_INC -L$TACC_FFTW3_LIB -lfftw3
它运作得很好。这是我的Makefile,如果需要的话:
# RULES
EXEC := fftw_ex
SRC := $(wildcard *.c)
OBJ := $(SRC)
# OPERATIONS
CC := gcc
CFLAGS := -O3 -I$TACC_FFTW3_INC
LDFLAGS := -L$TACC_FFTW3_LI
LDLIBS := -lfftw3
$(EXEC): $(OBJ)
$(CC) $(LDFLAGS) $(LDLIBS) -g -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $<
# PHONY TARGETS
.PHONY: clean
clean:
@echo Cleaning...;rm -rf *.o fftw_ex
非常感谢任何帮助!
答案 0 :(得分:3)
运行make应该显示它运行的命令,因此您可以将其与手动运行的命令进行比较。 但是这个
$(CC) $(LDFLAGS) $(LDLIBS) -g -o $@ $^
应该在要编译的文件之后使库链接:
$(CC) -g -o $@ $^ $(LDFLAGS) $(LDLIBS)
你不能在makefile中使用$ VARIABLE_NAME来获取shell变量,makefile中的语法是$(VARIABLE_NAME),所以
CFLAGS := -O3 -I$(TACC_FFTW3_INC)
LDFLAGS := -L$(TACC_FFTW3_LIB)
确保来自shell的TACC_FFTW3_LIB和TACC_FFTW3_INC都是exported。 (注意拼写错误的TACC_FFTW3_LI)