makefile
程序员文章站
2022-05-13 15:08:27
...
makefile
对多文件构成的大中型软件项目进行编译、调试的工具
工作机制
有5个源文件
main.c
function1.h
function1.c
function2.h
function2.c
main.c
#include "function1.h"
#include "function2.h"
int main(int argc, char **argv)
{
function1_print("hello");
function2_print("world");
return 0;
}
function1.h
//function1.h
#include<stdio.h>
void function1_print(char *str);
function1.c
//function1.c
#include "function1.h"
void function1_print(char *str)
{
printf("This is function1 print %s\n", str);
}
function2.h
//function2.h
#include<stdio.h>
void function2_print(char *str);
function2.c
//function2.c
#include "function2.h"
void function2_print(char *str)
{
printf("This is function2 print %s\n", str);
}
依赖关系图:
makefile文件:
main: main.o function1.o function2.o
gcc -o main main.o function1.o function2.o
main.o: main.c function1.h function2.h
gcc -c main.c
function1.o: function1.c function1.h
gcc -c function1.c
function2.o: function2.c function2.h
gcc -c function2.c
clean:
rm *.o
make命令会读取makefile文件的内容,比较目标文件和依赖文
件的日期和时间,当依赖文件的日期比目标文件得时间新的时候,
则根据命令重新生成目标文件
简化写法
变量
隐式规则
- C语言程序
.o文件会自动找到对应的.c文件,用cc命令进行编译 - C++程序
.o文件会自动找到对应的.cc文件,用g++进行编译 - 汇编程序
.o文件会自动找到对应的.s文件,并且用as命令进行汇编
简化后:
main: main.o function1.o function2.o
clean:
rm *.o
伪目标
.PHONY:clean
伪目标的语句一定会执行,而不管目标文件是否是最新的。例如:在源代码所在目录下有一个名为clean的文件,那么在make后,它的修改时间一直不会不变化,导致make clean 失效。此时就可以用 .PHONY:clean 来强制cLean。
同时生成多个可执行文件
.PHONY: clean all
all: main hello
main: main.o
gcc $^ -o aaa@qq.com
hello: hello.o
gcc $^ -o aaa@qq.com
%.o: %.c
gcc -c $^ -o aaa@qq.com
clean:
rm -rf *.o
上一篇: Linux系统管理——进程管理
推荐阅读
-
linux下使用autoconf和automake生成Makefile原理详解
-
【Makefile】strip
-
C、C++的Makefile模板
-
Linux里Makefile是什么?它是如何工作的?
-
Python实现生成简单的Makefile文件代码示例
-
Makefile中代码写在同一行和分开几行写有什么区别?
-
关于Linux下对于makefile的理解
-
deepstream5.0 deepstream-test1四类别pipeline检测器-makefile转为Qt Creator工程编译(二)
-
Makefile/cmake/node-gyp中区分判断不同平台的方法
-
构建工具:Make和Makefile