[Linux CMD] 代码编译 make

说明:

        在Linux环境中,make是一个非常强大的工具,用于自动编译和构建程序。它通过读取名为Makefile(或makefile,大小写不敏感)的特殊文件来确定如何编译和链接程序的不同部分。

        当执行make时,make会在当前的目录下查找makefile这个文本文件,而makefile里面则记录了源代码如何编译的详细信息。make会自动地判别源代码是否经过变动了,而自动更新执行文件。

对于具体使用make,直接查看 2.1选项部分 

一、Makefile

1.1 Makefile简介

  • Makefile结构:Makefile由一系列规则组成,每个规则描述了如何生成一个或多个目标文件(通常是可执行文件或库文件)。每个规则的基本结构包括目标(target)、依赖(dependencies)和命令(commands)。
  • 目标(target):你想生成的文件或执行的动作。
  • 依赖(dependencies):生成目标所需要的文件或目标。
  • 命令(commands):当目标的任何一个依赖比目标新,或者目标不存在时,需要执行的shell命令。

1.2 基本使用 

  • 默认目标:不带任何参数运行make时,默认尝试构建第一个目标(通常是all)。
  • 指定目标:可以通过make target_name来指定构建特定的目标。
  • 清理:通常会在Makefile中定义一个clean目标来删除编译过程中产生的中间文件,如make clean

1.3  Makefile示例

hello: main.o factorial.o hello.o
    gcc -o hello main.o factorial.o hello.o

main.o: main.c
    gcc -c main.c

factorial.o: factorial.c
    gcc -c factorial.c

hello.o: hello.c
    gcc -c hello.c

clean:
    rm -f *.o hello

在这个例子中,hello是最终的可执行文件,依赖于main.ofactorial.ohello.o三个对象文件。每一条规则的下方是构建这些目标所需的编译命令。

1.4 Makefile变量和自动推导

  • 变量:可以在Makefile中定义变量来简化命令,如CC=gcc定义编译器。
  • 自动推导:make能够根据文件的后缀自动推断如何编译,例如.c文件默认使用ccgcc编译。

二、make

2.1 选项

最为常用的是: make -j

Usage全称RoleDemo
-f--file指定使用哪个Makefile文件make -f my_makefile
-jN并行编译,N表示同时运行的作业数

make -j 或

make -j4

-n--just-print打印要执行的命令,但不实际执行make -n
-q--question查询模式,检查指定目标是否需要更新,不输出也不执行命令make -q
-B--always-make无条件重新编译所有目标make -B
-C dir改变目录到dir后再执行makemake -C subdir

2.2 查看帮助

使用 make --help 或 man make 可以查看详细的帮助文档和所有可用的选项。

2.3 建议

  • 理解依赖关系:确保Makefile正确反映了文件之间的依赖关系。
  • 增量编译:make只会重新编译那些比目标新的源文件,大大节省时间。
  • 调试Makefile:使用-p选项查看make的内部数据库,有助于调试复杂的Makefile。
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值