makefile学习之路——变量和函数调用小结

        为了可以巩固以前的学习,这里用一个小项目来完成变量和函数的总结。
bash

        需求以下:
ide

        一、 自动生成target文件夹存放可执行文件
函数

        二、 自动生成objs文件夹存放编译生成的目标文件
学习

        三、 支持调试版本的编译选项
ui

        四、 考虑代码的扩展性
调试


        

#使用的命令
CC := gcc
MKDIR := mkdir
RM := rm -rf

#目标文件夹
DIR_OBJS := objs
DIR_TARGET := target

#辅助变量
DIRS := $(DIR_OBJS) $(DIR_TARGET)

#目标
TARGET := $(DIR_TARGET)/hello-makefile.out

#源文件, 经过使用预约义函数获取
SRCS := $(wildcard *.c)            #main.c const.c fun.c
#根据源文件,获取目标文件,而后,将目标文件放到文件夹下
OBJS := $(SRCS:.c=.o)             #main.o const.o fun.o
OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS))        #objs/main.o    objs/const.o     objs/fun.o

#定义伪目标
.PHONY : rebuild clean all

#定义最终规则
$(TARGET) : $(DIRS) $(OBJS)
    $(CC) -o $@ $(OBJS)
    @echo "Target File ==> $@"
    
#建立文件夹
$(DIRS):
    $(MKDIR) $@
    
#根据目录完成模式替换,这里的.o文件都应该在objs文件夹下,所以
$(DIR_OBJS)/%.o : %.c
    $(CC) -o $@ -c $^


rebuild : clean all

all: $(TARGET)

clean :
    $(RM) $(DIRS)

        上面是不考虑调试的代码,运行结果以下
blog

image.png


        下面增长编译选项功能
get

        将这部分代码修改便可it

$(DIR_OBJS)/%.o : %.c
    $(CC) -o $@ -c $^
    
    
    
    
$(DIR_OBJS)/%.o : %.c
    ifeq ($(DEBUG), true)
        $(CC) -o $@ -g -c $^
    else
        $(CC) -o $@ -c $^
    endif



交流QQ群:199546072编译

相关文章
相关标签/搜索