码迷,mamicode.com
首页 > 其他好文 > 详细

makefile

时间:2016-06-10 23:22:11      阅读:357      评论:0      收藏:0      [点我收藏+]

标签:makefile



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

makefile

标签:makefile

原文地址:http://990487026.blog.51cto.com/10133282/1787807

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!