makefile 初步1
将两个独立的C文件编译在一起
源程序:
chunli@ubuntu:~/makefile$ cat main.c
#include <stdio.h>
int max(int a,int b);
int main()
{
printf("max = %d\n",max(10,20));
return 0;
}
chunli@ubuntu:~/makefile$ cat a.c
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}方法1,
只编译不链接,
chunli@ubuntu:~/makefile$ gcc -o a.o -c a.c chunli@ubuntu:~/makefile$ gcc -o main.o -c main.c chunli@ubuntu:~/makefile$ gcc -o app a.o main.o chunli@ubuntu:~/makefile$ ./app max = 20
方法2,使用makefile
只认这两种makefile,Makefile
或者make -f makefiel的文件名
makefile必须tab键
chunli@ubuntu:~/makefile$ vim makefile start: gcc -o a.o -c a.c gcc -o main.o -c main.c gcc -o app a.o main.o
方法3,稍微复杂的
chunli@ubuntu:~/makefile$ cat makefile start:main.o a.o gcc -o app a.o main.o main.o a.o: gcc -o main.o -c main.c gcc -o a.o -c a.c
执行make,并运行
解析:
当执行start的时候,会检查文件 main.o a.o 是否存在,如果不存在就去找 main.o a.o并执行
chunli@ubuntu:~/makefile$ make gcc -o app a.o main.o chunli@ubuntu:~/makefile$ ./app max = 20
方法4,make 标号
chunli@ubuntu:~/makefile$ cat makefile start:main.o a.o gcc -o app a.o main.o @echo "-------------OK---------" main.o a.o: gcc -o main.o -c main.c gcc -o a.o -c a.c clean: rm -rf *.o rm -rf app
@就是不显示这条语句
使用:
chunli@ubuntu:~/makefile$ make clean rm -rf *.o rm -rf app chunli@ubuntu:~/makefile$ make gcc -o main.o -c main.c gcc -o a.o -c a.c gcc -o app a.o main.o -------------OK--------- chunli@ubuntu:~/makefile$ ./app max = 20 Hello World!
方法5 makefile的变量
chunli@ubuntu:~/makefile$ cat makefile #定义变量CC = gcc CC = gcc start:main.o a.o $(CC) -o app a.o main.o @echo "-------------OK---------" main.o a.o: $(CC) -o main.o -c main.c $(CC) -o a.o -c a.c clean: rm -rf *.o rm -rf app
makefile的变量2,文件名,编译,链接,全用变量来代替
main.c源文件
int main()
{
printf("Hello World! \n");
return 0;
}makefile文件
chunli@ubuntu:~/makefile$ cat makefile #CC = gcc CC = g++ EXEC=app SRCS=main.c OBJS=main.o FLAGS1=-o FLAGS2=-c start:$(OBJS) $(CC) $(FLAGS1) $(EXEC) $(OBJS) @echo "-------------OK---------" $(OBJS): $(CC) $(FLAGS1) $(OBJS) $(FLAGS2) $(SRCS) clean: rm -rf $(OBJS) rm -rf $(EXEC)
makefile高级应用1
在makefile文件中加入多个原文件,只需要修改一处就可以了
项目文件:
chunli@ubuntu:~/makefile$ ls -1 a.c b.c main.c makefile
源文件:
chunli@ubuntu:~/makefile$ cat a.c
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
chunli@ubuntu:~/makefile$ cat b.c
int add(int a,int b)
{
return a + b;
}
chunli@ubuntu:~/makefile$ cat main.c
#include <stdio.h>
int max(int a,int b);
int add(int a,int b);
int main()
{
printf("max = %d\n",max(10,20));
printf("max = %d\n",add(10,20));
printf("Hello World! \n");
return 0;
}
chunli@ubuntu:~/makefile$ cat makefile
.SUFFIXES:.c .o
CC=gcc
EXEC=app
SRCS=main.c a.c b.c
OBJS=$(SRCS:.c=.o) #跟随SRCS的文件名前缀,相当于字符串替换
FLAGS1=-o
FLAGS2=-c
start:$(OBJS)
$(CC) $(FLAGS1) $(EXEC) $(OBJS)
@echo "-------------OK---------"
.c.o:
$(CC) $(FLAGS1) $@ $(FLAGS2) $<
clean:
rm -rf $(OBJS)
rm -rf $(EXEC)编译并运行:
chunli@ubuntu:~/makefile$ make gcc -o main.o -c main.c gcc -o a.o -c a.c gcc -o b.o -c b.c gcc -o app main.o a.o b.o -------------OK--------- chunli@ubuntu:~/makefile$ ./app max = 20 max = 30 Hello World!
本文出自 “魂斗罗” 博客,请务必保留此出处http://990487026.blog.51cto.com/10133282/1787807
原文:http://990487026.blog.51cto.com/10133282/1787807