常用变量

CFLAGS C编译器的选项,没有定义,可以指定编译头文件路径 LDFLAGS 链接器的选项,没有定义,可以指定链接库文件 LDLIBS 链接器的选项,没有定义,可以指定链接库文件路径

$@ 目标文件

$^ 所有的依赖文件

$< 第一个依赖文件

$? 规则中所有比目标新的条件组成一个列表(以空格分隔)

简单编译的自动推导

简单情况下, makefile可以根据隐式规则进行自动推导,编译环节可以省略,只需要把链接部分写清楚

Fortran含module时,makefile的书写

含有module时就不能省略编译环节,否则链接容易出错,下面给出一个简单的makefile例子

# INST_DIR = /home/mars/.Setup
# CFLAGS = -I/usr/include/malloc -fopenmp
# LDFLAGS = -lfftw3
CC = gfortran
BIN  = main
OBJS = *.o
COBJS = fft.f mlsqr_mod.f90 forHRLRT.f90 main.f90
$(BIN) : $(OBJS)
    $(CC)  $(OBJS) -o $(BIN) $(LDFLAGS)

$(OBJS) : $(COBJS)
    $(CC) -c $^  $(CFLAGS)

run :: $(BIN)
    ./$(BIN)

install :: $(BIN)
    install -s $(BIN) $(INST_DIR)

clean ::
    rm -f $(BIN) core $(OBJS) *.mod