简介
使用GCC的命令行进行程序编译在单个文件下是比较方便的,当工程中文件逐渐增多,甚至变得十分庞大的时候,使用GCC编译就会变得力不从心。linux中的make工具提供了一种管理工程的功能,可以方便地进行程序编译。
一个例子
一个工程文件列表如图所示:
各个文件内容如下:
1 2 3 4 5 6
|
float add_float(float a, float b) { return a+b; }
|
add_float.c
1 2 3 4 5 6
|
int add_int(int a, int b) { return a+b; }
|
add_int.c
1 2 3 4 5 6
|
float sub_float(float a, float b) { return a-b; }
|
sub_float.c
1 2 3 4 5 6
|
int sub_int(int a, int b) { return a-b; }
|
sub_int.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h>
#include "add.h" #include "sub.h" int main(void) { int a = 10, b = 12; float x= 1.23456,y = 9.87654321; printf("int a+b IS:%d\n",add_int(a,b)); printf("int a-b IS:%d\n",sub_int(a,b)); printf("float x+y IS:%f\n",add_float(x,y)); printf("float x-y IS:%f\n",sub_float(x,y)); return 0; }
|
main.c
如果直接使用命令行编译,需要使用如下命令:
1 2 3 4 5 6
| gcc -c -o add/add_int.o add/add_int.c gcc -c -o add/add_float.o add/add_float.c gcc -c -o sub/sub_int.o sub/sub_int.c gcc -c -o sub/sub_float.o sub/sub_float.c gcc -c -o main.o main.c -Iadd -Isub gcc -o cacu add/add_int.o add/add_float.o sub/sub_int.o sub/sub_float.o main.o
|
或者使用gcc默认规则直接使用最后一条命令生成可执行文件
但是这样很麻烦,所以makefile的意义就在于将这些命令集成到一个make命令里,使用make命令进行编程的时候,从makefile文件中读取设置情况,进行解析后运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| cacu:add_int.o add_float.o sub_int.o sub_float.o main.o gcc -o cacu add/add_int.o add/add_float.o \ sub/sub_int.o sub/sub_float.o main.o
add_int.o:add/add_int.c add/add.h gcc -c -o add/add_int.o add/add_int.c
add_float.o:add/add_float.c add/add.h gcc -c -o add/add_float.o add/add_float.c
sub_int.o:sub/sub_int.c sub/sub.h gcc -c -o sub/sub_int.o sub/sub_int.c
sub_float.o:sub/sub_float.c sub/sub.h gcc -c -o sub/sub_float.o sub/sub_float.c
main.o:main.c add/add.h sub/sub.h gcc -c -o main.o main.c -Iadd -Isub
clean: rm -f cacu add/add_int.o add/add_float.o \ sub/sub_int.o sub/sub_float.o main.o
|
Author:
BB_Jack
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE