make文件基础用法

参照:https://www.jianshu.com/p/0b2a7cb9a469

创建工作目录,包含一下文件

  • main.c
  • person.c
  • b.h
  • c.h
/***
c.h
***/
//this is c.h
/***
b.h
***/
//this is b.h
复制代码
/***
main.c
***/
#include<stdio.h>
//#include"a1.h"
//#include"b.h"

int main()
{
    printf("The Version 1.1\n");
    return 0;
}
复制代码

如果main.c文件中加上注释的头文件会生成对应的b.h.gch文件,此处存疑

1.创建makefile文件:

复制代码
/***
makefile
***/
app: main.o person.o other.o
    gcc -o app main.o person.o other.o
main.o:main.c
    gcc -c main.c a.h
person.o:person.c a.h b.h
    gcc -c person.c
other.o:person.c b.h
    gcc -c person.c -o other.o

clean:
    rm app main.o person.o other.o
复制代码

2.定义变量,代替目标文件,简化代码:

复制代码
objects = main.o person.o other.o
app : $(objects)
    gcc -o app $(objects)
main.o : main.c
    gcc -c main.c c.h
person.o : person.c c.h b.h
    gcc -c person.c
other.o : person.c b.h
    gcc -c person.c  -o other.o

clean :
    rm app $(objects)
复制代码

3.使用makefile自动推导机制,简化指令语句

       在编译过程中,哪些类型的文件的编译需要哪些指令是固定的,所以makefile文件可以从依赖关系自动推导出后面要执行的语句

简化如下:

复制代码
objects = main.o person.o

app : $(objects)
    gcc -o app $(objects)

main.o : main.c
person.o : person.c c.h b.h

clean :
    rm app $(objects)
复制代码

只有依赖声明下面没有任何语句,makefile才会自动推导,否则执行指定文件。

注意:这里去掉了other.o,是因为other.o依赖person.c手动生成的other.o,这里的makefile只会生成与依赖文件相同名字的.o文件。

4.如果文件不在一个目录下,需要指定目录,只需要在makefile的第一行添加

VPATH = path1 : path2 :path3

makefile文件会自动按照路径顺序,依次查找文件

如图:

person.c文件在  /home/exbot/wangqinghe/makefileTest

b.h文件在/home/exbot/wangqinghe

c.h 文件在当前目录中2019060601 文件夹下

于是makefile 如下:

复制代码
VPATH = ./2019060601 :/home/exbot/wangqinghe : /home/exbot/wangqinghe/makefileTest

CC = gcc

objects = main.o person.o

app : $(objects)
        $(CC) -o app $(objects)
        @echo "input information : compile finished"
        #@echo "输出信息:编译完成"

main.o : main.c

person.o : person.c c.h b.h

.PHONY : clean

clean :     
        rm app $(objects)
复制代码

 

posted @   王清河  阅读(353)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示