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!
转载于:https://blog.51cto.com/990487026/1787807