• [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示例

    1. hello: main.o factorial.o hello.o
    2. gcc -o hello main.o factorial.o hello.o
    3. main.o: main.c
    4. gcc -c main.c
    5. factorial.o: factorial.c
    6. gcc -c factorial.c
    7. hello.o: hello.c
    8. gcc -c hello.c
    9. clean:
    10. 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。
  • 相关阅读:
    测试.net文字转语音模块System.Speech
    vue搭建项目详细介绍
    计算机组成与结构
    2022.8.9 高级数据结构——图
    MAC MINI 2012安装Montery折腾笔记
    第3章:中文本文向量化——代码详解
    javaWeb项目基于tomcat运行部署后访问方案总结
    FastAPI 学习之路(三十一)CORS(跨域资源共享)
    物联网时代的等保测评:保障万物互联的安全
    java毕业设计校园美食评价系统mybatis+源码+调试部署+系统+数据库+lw
  • 原文地址:https://blog.csdn.net/m0_52980547/article/details/140433741