如何在linux下写makefile

哈,这个Makefile的东西其实就像你做饭的菜谱一样,你得按照步骤来。
我之前做项目的时候就深刻地体会到了这一点。

上周一位客户问我Makefile中的依赖关系和规则是什么意思。
我告诉他这就像你项目中每个文件之间的“相对关系”。
例如,如果您有一个 main.c 主程序和一个 main.h 头文件,则必须先将它们一起更新,然后才能重新编译该程序。
因此,在Makefile中应该这样写:
a.输出:main.o main.o: main.c main.h
这就像说最终的可执行文件a.out必须依赖于目标文件main.o,而main.o必须依赖于两个源文件main.c和main.h。

然后客人问规矩是什么。
我想说这些规则就像告诉 Make 工具如何“烹饪”。
例如,您可以输入:
a.输出:main.o gcc -o a.out main.o
main.o: main.c main.h gcc -c main.c -o main.o
这里的gcc就是编译器,-o后面是输出文件的名称。
这样,Make工具就会按照这个规则编译源文件,生成目标文件,最后链接成可执行文件。

说到注释,这就像在菜谱上写“小心高温”提醒。
在 Makefile 中,注释以它开头,例如:
这是一条注释,表示下面是编译main.c的命令 main.o: main.c main.h gcc -c main.c -o main.o
就宏而言,它们就像食谱中的“酱袋”。
您可以定义多个变量,然后在整个 Makefile 中使用它们。
例如:
CC=海湾合作委员会 CFLAGS=-墙
然后您可以在规则中使用 $(CC) 和 $(CFLAGS) 而不是特定的编译命令和选项。

但是,您可以根据项目的需要调整 Makefile。
我现在还在思考这个问题,如何让Makefile更加高效,减少不必要的编译。
不管怎样,Makefile是个好东西,使用得当可以节省很多时间。

Linux项目自动化构建工具-make/Makefile

make和Makefile通过比较修改时间(ModifyTime)来判断可执行程序是否被更新。

上周试过了。
非常清楚。

2 02 3 年创建的 Makefile 只查看时间戳。

我朋友说ModifyTime是最准确的。

修改时间是文件内容最后一次修改的时间。

在Makefile中编写规则以及目标文件和依赖文件之间的关系。

例如,hellomake:hellomake.o hellofunc.o
hellomake.o 和 hellofunc.o 依赖于 hellomake.c 和 hellofunc.c。

修改hellofunc.c后,其ModifyTime将会改变。

检查发现hellofunc.c比hellofunc.o更新。

重新编译hellofunc.c并创建一个新的hellofunc.o。

然后重新链接创建一个新的hellomake。

hellomake.c保持不变,因此不需要重新编译。

这个机制非常有效。

无需每次都编译所有内容。
节省时间。

Makefile语法也很方便。

例如,%.o:%.c 可以消除问题。

.PHONY 也很容易使用。
例如,Clean 并不关心它是否是文件。

简而言之,make 通过比较时间只编译发生变化的部分。

速度快得多。

只要确保时间正确即可。

忘记它吧。
由你决定。

在Linux操作系统下自动生成Makefile的方法

安装自动工具: sudo apt install automake 扫描源文件:自动扫描 更改configure.scan:指定版本和作者 生成 aclocal.m4 :aclocal 生成config.h.in:autoheader 创建Makefile.am:描述源目标关系 生成配置:autoconf 生成Makefile:./configure autotools 简化了 facfile 的生成,效率显着提高。

linux中make,makeinstall命令分别是什么,用法?

make:编译源代码。
make target:编译指定的目标。
-f file:指定Makefile。
-j num:并行编译任务的数量。

make install:安装已编译的程序。
按照Makefile安装规则运行。

make 和 make install 依赖于 Makefile。