我自己写Makefile, 里面注释了一些写法, 希望能帮到别人

我自己写Makefile, 里面注释了一些写法, 希望能帮到别人

 

最好的参考博客

https://blog.csdn.net/whitefish520/article/details/103968609?spm=1001.2014.3001.5506

 

第1种:

# 设置编译器
cc := gcc
cflags := -O0 -Wall -g


# 设置中间目标文件
objects := ert_main.o \
    ert_top_model_2017a.o \
    ert_ref_model_1_2017a.o \
    ert_ref_model_2_2017a.o


# 编译最终目标文件
ert_main : $(objects)
    $(cc) $(cflags) -o ert_main $(objects)


# 编译中间目标文件
ert_main.o : ert_main.c ert_top_model_2017a.h rtwtypes.h
    $(cc) $(cflags) -c ert_main.c

ert_top_model_2017a.o : ert_top_model_2017a.c ert_top_model_2017a.h ert_top_model_2017a_private.h
    $(cc) $(cflags) -c ert_top_model_2017a.c

ert_ref_model_1_2017a.o : ert_ref_model_1_2017a.c ert_ref_model_1_2017a.h ert_ref_model_1_2017a_private.h
    $(cc) $(cflags) -c ert_ref_model_1_2017a.c

ert_ref_model_2_2017a.o : ert_ref_model_2_2017a.c ert_ref_model_2_2017a.h ert_ref_model_2_2017a_private.h
    $(cc) $(cflags) -c ert_ref_model_2_2017a.c


# 设置伪目标文件
.PHONY : clean

clean :
    rm ert_main $(objects)

 

第2种:

# make一些规则
############################################################################
# $@ : 表示目标
# $^ : 表示所有的依赖
# $< : 表示第一个依赖
#
# =  : 使用=进行赋值, 变量的值是整个Makefile中最后被指定的值
# := : 使用:=进行赋值, 表示直接赋值
# ?= : 使用?=进行赋值, 表示如果该变量没有被赋值, 则赋予等号后的值
# += : 使用+=进行赋值, 和平时写代码的理解一样, 表示将等号后面的值添加到前面的变量
#
############################################################################ 



############################ 定义一些变量: 开始 ############################
cc := gcc
cflags := -O0 -Wall -g
objs := main_run.o\
       general_header.o\
       ode_forward_euler.o\
       ode_backward_euler.o\
       ode_trapezoid.o

# 定义变量dep_files: 保存所有的依赖(包括根据.h依赖所生成的依赖表.d文件)
dep_files := $(patsubst %, %.d, $(objs))

# 判断变量dep_files: 判断该变量中的文件是否存在, 得到真实存在的文件
dep_files := $(wildcard $(dep_files))
############################ 定义一些变量: 结束 ############################



############################ 编译目标文件: 开始 ############################
main_run: $(objs)
    $(cc) $(cflags) $^ -lm -o $@

# 判断变量dep_files是否为空, 如果不是空, 把变量dep_files中的依赖引入到Makefile中
ifneq ($(dep_files),)
include $(dep_files)
endif

# -MD -MF: 在编译源文件时, 生成依赖规则.d文件(包括.h)
$(objs): %.o: %.c
    $(cc) $(cflags) -c $< -MD -MF $@.d -o $@
############################ 编译目标文件: 结束 ############################



# .PHONY: xxx : 明确说明, xxx命令与当前编译的目录中的同名文件无关
.PHONY: clean

# 设置该标签用于清楚.o和目标运行文件
clean:
    rm $(objs) $(dep_files) main_run

posted @ 2022-11-27 00:48  仰望星空-自然-7  阅读(22)  评论(0编辑  收藏  举报