码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-01 21:55:00      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:makefile

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

        需求如下:

        1、 自动生成target文件夹存放可执行文件

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

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

        4、 考虑代码的扩展性


        

#使用的命令
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)

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

技术分享图片


        下面增加编译选项功能

        将这部分代码修改即可

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


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

标签:makefile

原文地址:http://blog.51cto.com/12876518/2093608

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!