1.在存放.c文件的目录下编按如下方法编写Makefile文件:
#Makefile start..
CC := gcc #根据需要添加其它如XX := g++
CFLAGS := -Wall -O -g #优化,输出调试信息,及所有警告
TARGET :=argcv test hello unixio getuid #要编译的目标名,文件名去后缀的
#下面开始一一编译了
all:$(TARGET)
@echo compileing...
%.o:%.c
$(CC) $(CFLAGS) -c $< #发现用-c和-o都是输出一样的,有点不明白
clean:
rm -rf $(TARGET)
#end Makefile
2.执行make,输出结果:
[savant@savant-host prog]$ make
gcc -Wall -O -g argcv.c -o argcv
gcc -Wall -O -g test.c -o test
gcc -Wall -O -g hello.c -o hello
gcc -Wall -O -g unixio.c -o unixio
gcc -Wall -O -g getuid.c -o getuid
3.另外,如果这个目录是存放的一个项目的文件,所有的文件最终生成一个可执行文件,用下面的Makefile:
CC = gcc
LD = gcc
CFLAGS = -Wall -c
LDFLAGS = -lpthread #还可以加入INCLUDES和LIBS变量,视情况而定
SRCS = $(wildcard *.c) #SRCS的值就是当前面目录下面所有的以.c结尾的源文件
OBJS = $(patsubst %c,%o,$(SRCS)) #SRCS目录下创建c文件相对的o文件
TARGET = myapp #最终链接生成的目标名
.PHONY: all clean
all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^
%o: %c
$(CC) $(CFLAGS) -o $@ $<
clean:
@rm -f *.o $(TARGET)
编译当前Makefile所在目录下的所有.c文件
执行
make
make clean