Makefile基础教程

From https://blog.csdn.net/PYJTRK/article/details/122279448

Makefile是什么?
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。

Make 与 Makefile的关系
make是一个命令工具,它解释Makefile中的指令。在makefile文件中描述了整个工程所有文件的编译顺序、编译规则(编译依赖、编译后生成的目标文件叫什么等)。

Makefile命名规则
Makefile 或 makefile,一般使用Makefile

Cmake又是什么?
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它可以输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 automake。只是CMake的组态档取名为CMakeLists.txt。CMake并不直接构建出最终的软件,而是产生的标准的建构档(如UNIX的Makefile或者Windows Visual C++的 projects/workspaces),然后再依一般的构建方式使用。

CMake与CMakeLists的关系
cmake是一个命令工具,可以用来生成makefile。但也要根据CMakeLists.txt中的内容来生成,CMakeLists.txt就是写给cmake的规则。

重点
make是一个命令工具,Makefile是一个文件,make执行的时候,去读取Makefile文件中的规则,重点是makefile得自己写。
cmake是一个命令工具,CMakeLists.txt是一个文件,cmake执行的时候,去读取CMakeLists.txt文件的规则并生成Makefile,重点是CMakeLists.txt得自己写。

PS:碰到过面试问makefile和cmake有什么区别。

查看make版本

 

前期准备

首先先写四个c文件和相应的h文件,分别是fun0.c,fun1.c,fun2.c,fun0.h,fun1.h,fun2.h以及main.c

//fun0.c
#include "fun0.h"
void print0(){
    printf("hello world 0");
}
//fun0.h
#include <stdio.h>
void print0(void);
//fun1.c
#include "fun1.h"
void print1(){
    printf("hello world 1");
}
//fun1.h
#include <stdio.h>
void print1(void);
//fun2.c
#include "fun2.h"
void print2(){
    printf("hello world 2");
}
//fun2.h
#include <stdio.h>
void print2(void);
//main.c
#include "fun0.h"
#include "fun1.h"
#include "fun2.h"

int main(){
    print0();
    print1();
    print2();
    return 1;
}

文件如下:

 

编写Makefile文件

接着在当前文件夹下创建名为Makefile的文件,代码如下。编写的时候一定要注意!gcc前面是一个TAB,不要输入空格,否则会出错。

touch Makefile
vim Makefile
chmod 755 Makefile

这里解释一下,红色框是指目标文件,而蓝色框是指被依赖的文件,也就是说要想生成冒号左边的文件,就需要依赖冒号右边的文件。

 编写完成后,在当前文件夹输入make回车即可。如果生成绿色可执行文件表示本次编译成功。输入./main 即可执行。

Makefile文件优化

在上面,我们编写了四个c文件,每个c文件都需要生成相应的.o对象文件,如果一个项目有成百上千个c文件,那么上面这种写法的代码量就非常大了。

修改 Makefile 文件

 %是通配符,ABC%DEF就是指以ABC开头,以DEF结尾字符串。重新make一下,也能得到刚刚的结果。

Makefile也可以使用变量,我们可以继续修改刚刚Makefile代码。objs是我们定义的变量,它等于 main.o fun0.o fun1.o fun2.o 这条长长的字符串。调用的方法是 ${变量名}。如此一来代码就更加简洁了。

每次make之后都会生成大量的.o文件,我们可以编写相关命令来删除这些中间文件。clear是自定义的命令,make之后,再输入make clear加回车即可清除.o文件。

linux 软链接文件

在Linux中,创建软链接(或称为符号链接)的命令是ln -s。软链接是一个指向另一个文件的特殊类型的文件,它允许你使用一个文件的路径来访问另一个文件,而不是复制文件内容。

创建软链接的基本语法如下:

ln -s [目标文件或目录] [软链接名]

 

 

posted @ 2023-05-30 09:34  jhtchina  阅读(21)  评论(0)    收藏  举报