有以下代码,编写一个makefile文件来编译它们:
文件fun1.c :
#include
void myprintf1()
{
printf("fun1!\n");
}
文件fun2.c:
#include
void myprintf2()
{
printf("fun2!\n");
}
文件head.h:
void myprintf1();
void myprintf2();
文件fun.c:
#include "head.h"
int main(int argc, const char *argv[])
{
myprintf1();
myprintf2();
return 0;
}
仅写出两种方式,但绝不只有两种方式
//用函数解决
CC = gcc
CFLAGS = -c -g -Wall
OBJ = $(wildcard *.c)
SRC = $(patsubst %.c, %.o , $(OBJ))
test:$(SRC)
$(CC) $^ -o $@
%.o:%.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
$(RM) *.o
//用自动变量、隐含变量实现
SRC = fun1.o fun2.o fun.o
CC = gcc
CFLAGS = -c -g -Wall
test:$(SRC)
$(CC) $(SRC) -o $@
%.o:%.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
$(RM) *.o