Makefile清理操作
清理操作的作用: 清除编译生成的中间.o文件和最终目标文件
make clean
如果当前目录下有同名clean文件,则不执行clean对应的命令,解决方案:
伪目标声明:
.PHONY:clean
声明目标为伪目标之后,Makefile将不会检查该目标是否存在或者该目标是否需要更新
clean命令中的特殊符号:
-
此条命令出错,make也会继续执行后续的命令。如:-rm main.o
rm -f
: 强制执行,比如若要删除的文件不存在使用-f
不会报错@
不显示命令本身,只显示结果。如:@echo clean done
其它
make
默认执行第一个出现的目标,可通过make dest
指定要执行的目标make -f
:-f
执行一个Makefile文件名称,使用make执行指定的Makefile:make -f mainmak
实例
Makefile的第5个版本:
makefile
# 默认目标
all: main
target=main
src=$(wildcard ./*.c)
obj=$(patsubst %.c, %.o, $(src))
CC=gcc
CFLAGS=-I ./
$(target):$(obj)
$(CC) $^ -o $@
%.o:%.c
$(CC) -c $< $(CFLAGS) -o $@
# 定义两个伪目标 一个用来清除生成的中间.o文件,一个用来清除生成的可执行程序
.PHONY: clean rm
clean:
$(RM) $(obj)
rm:
$(RM) $(target)
c
#include "add.h"
#include <stdio.h>
int main(void) {
printf("%d\n", add(10, 20));
return 0;
}
c
#ifndef __SYSS_ADD_H__
#define __SYSS_ADD_H__
int add(int a, int b);
#endif //__SYSS_ADD_H__
c
#include "add.h"
int add(int a, int b) {
return a + b;
}
执行make
在Makefile的第5个版本中,综合使用了变量、函数、模式规则和清理命令,是一个比较完善的版本。
不过它是把当前文件夹下所有的源文件编译成一个可执行程序,下面一个是把源文件分别编译成可执行程序的版本
makefileCC:=gcc SRCS := $(wildcard *.c) BINS := $(SRCS:%.c=%) all: $(BINS) %: %.c $(CC) $< -o $@ .PHONY:clean clean: rm -f $(BINS)