标签: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
原文地址:http://990487026.blog.51cto.com/10133282/1787807