一:基本Makefile的改进问题:
1)由文件中指定的.c文件到随时在目录中增加.c文件而不需要修改Makefile:
使用wildcard函数
以下是使用wildcard的一些说明:
可见在变量定义和函数传参过程中通配符扩展比如"*.c"是不被支持的,故使用此函数。
2)变量被循环赋值的出现:
在赋值时使用":="代替"="
递归型变量循环扩展直到原始值
简单型变量仅仅做简单的替换且可以用作给变量赋值“ ”空格“Tab”等
3)文件名字局部不同,比如要由.c获得相应的.o文件
使用替换
基于此间三点,有如下Makefile0:
- #建立目录
-
#构建源文件和目标文件,附加完整路径信息
-
#写好依赖,附加执行语句
-
-
.PHONY : all clean
-
-
MKDIR = mkdir
-
RM = rm
-
RMFILES = -rf
-
-
CC = gcc
-
-
DIR_OBJS = objs
-
DIR_EXES = exes
-
DIRS = $(DIR_OBJS) $(DIR_EXES) #两个目标写一块可以方便建立目录,目标文件之后不可以有任何空格,否则错误无法查阅
-
EXE = complicated #最终目标
-
-
SRCS = $(wildcard *.c) #方便.c文件的添加
-
OBJS = $(SRCS:.c=.o) #.c .o文件的准备*****************************技术
-
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS)) #加上目录,死循环???????? 不会!因为":="是不能被循环替代赋值的
-
EXE := $(addprefix $(DIR_EXES)/,$(EXE))
-
-
all:$(DIRS) $(EXE)
-
-
$(DIRS):
-
$(MKDIR) $@
-
-
$(EXE):$(OBJS)
-
$(CC) -o $@ $^
-
-
$(DIR_OBJS)/%.o : %.c
-
$(CC) -o $@ -c $^
-
-
clean:
-
$(RM) $(RMFILES) $(DIRS)
阅读(1264) | 评论(0) | 转发(0) |