简单的makefile文件如下
start: hello.o //标号:依赖项
[tab键] gcc -o hello hello.o //只会执行这一句除非需要依赖关系才会执行依赖标号的
@echo "------------------ok----------------" //@的意思是输出的时候不会输出echo
hello.o:
[tab键] gcc -o hello.o -c hello.c
clean:
[tab键] rm -rf hello.o
makefile中也可以有变量一般变量都用大写如:VARNAME=some_text
引用变量$(VARNAME)
如:
AA=gcc
start: hello.o //标号:依赖项
[tab键] $(AA)-o hello hello.o //只会执行这一句除非需要依赖关系才会执行依赖标号的
@echo "------------------ok----------------" //@的意思是输出的时候不会输出echo
hello.o:
[tab键] $(AA)-o hello.o -c hello.c
clean:
[tab键] rm -rf hello.o
以后换编译器就只需要改变AA的值就可以啦。。
再次简化
AA=gcc
SRCS=hello.c
OBJS=hello.o #还可以这样写:OBJS=$(SRCS:.c=.o)
EXEC=hello
start: $(OBJS) //标号:依赖项
$(AA)-o $(EXEC) $(OBJS) //只会执行这一句除非需要依赖关系才会执行依赖标号的
@echo "------------------ok----------------" //@的意思是输出的时候不会输出echo
$(OBJS) :
$(AA)-o $(OBJS) -c $(SRCS)
clean:
rm -rf $(OBJS)
////////////////
还有如下:
.SUFFIXES: .c .o #这是一种规则表示x.c文件与x.o文件关联
SRCS=hello.c
OBJS=$(SRCS:.c=.o)
EXES=hello
CC=gcc
start: $(OBJS)
$(CC) -o $(EXES) $(OBJS)
@echo "------------------ok----------------"
.c.o: #关联项
$(CC) -o [email protected] -c $< # [email protected] 表示规则对应的目标文件 hello.o $< 表示规则关联的文件hello.c
clean:
rm -rf $(OBJS)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、
/////////////////makefile同时编译多个文件
.SUFFIXES: .c .o #这是一种规则表示x.c文件与x.o文件关联
SRCS=hello.c\add.c #在这里同时编译2个文件
OBJS=$(SRCS:.c=.o)
EXES=hello
CC=gcc
start: $(OBJS)
$(CC) -o $(EXES) $(OBJS)
@echo "------------------ok----------------"
.c.o: #关联项
$(CC) -o [email protected] -c $< #自动根据$(OBJS)中.o的数量循环编译,直到编译完所有的.c文件
clean:
rm -rf $(OBJS)