首页 > 系统相关 >【Linux】项目自动化构建工具-make/Makefile(入门初使用)

【Linux】项目自动化构建工具-make/Makefile(入门初使用)

时间:2024-08-11 23:23:57浏览次数:15  
标签:文件 依赖 makefile make Linux Makefile 规则 test

make/Makefile

参考文章:爱编程的大丙

1.什么是make /makefile?为什么要使用?

make是一个命令工具,是一个解释makefile中指令的命令工具。

makefile是一个文件,关系到了整个工程的编译规则。

使用 GCC 的命令行进行程序编译在单个文件下是比较方便的,当工程中的文件逐渐增多,甚至变得十分庞大的时候,使用 GCC 命令编译就会变得力不从心。

这种情况下我们需要借助项目构造工具 make 帮助我们完成这个艰巨的任务。一般来说,大多数的IDE都有这个命令,比如:Visual C++的nmake,QtCreator的qmake等。

make工具在构造项目的时候需要加载一个叫做makefile的文件,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

2.如何使用make/makefile

makefile文件有两种命名方式 makefile 和 Makefile, 构建项目的时候在哪个目录下执行构建命令 make这个目录下的 makefile 文件就会别加载,因此在一个项目中可以有多个 makefile 文件,分别位于不同的项目目录中。

(1)makefile基础框架

1. 规则

Makefile的框架是由规则构成的。make命令执行时先在Makefile文件中查找各种规则,对各种规则进行解析后运行规则。规则的基本格式为:

#目标文件【:】依赖文件 # 构成有依赖关系
target1,target2...: depend1, depend2, ...
【Tab缩进】command  # 依赖方法
    ...

每条规则由三个部分组成分别是目标(target), 依赖(depend)和命令(command)。

命令(command):

  • 当前这条规则的动作,一般情况下这个动作就是一个 shell 命令
  • 例如:通过某个命令编译文件、生成库文件、进入目录等。
  • 动作可以是多个,每个命令前必须有一个Tab缩进并且独占占一行。
  gcc -o mybin test.c #编译test.c,形成mybin的可执行文件

依赖(depend):

  • 规则所必需的依赖条件,在规则的命令中可以使用这些依赖。
  • 例如:生成可执行文件的目标文件(*.o)可以作为依赖使用
  • 如果规则的命令中不需要任何依赖,那么规则的依赖可以为空
  • 当前规则中的依赖可以是其他规则中的某个目标,这样就形成了规则之间的嵌套
  • 依赖可以根据要执行的命令的实际需求, 指定很多个

目标(target):

  • 规则中的目标,这个目标和规则中的命令是对应的
  • 通过执行规则中的命令,可以生成一个和目标同名的文件
  • 规则中可以有多个命令, 因此可以通过这多条命令来生成多个目标, 所有目标也可以有很多个
  • 标签:文件,依赖,makefile,make,Linux,Makefile,规则,test
    From: https://blog.csdn.net/m0_73726899/article/details/141104731

相关文章

  • cmake里常见有关输出路径的变量
    参考资料[cmake-variables](cmake-variables(7)—CMake3.30.2Documentation)常见有关输出路径的变量变量(均可跟_来区分Debug和Release)Windows其他操作系统CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库.lib文件待补充CMAKE_RUNTIME_OUTPUT_DIRECTORY动态库.dll......
  • CentOs8的Linux平台详细下载与安装
    目录效果展示下载镜像文件安装CentOs8的Linux操作系统实现效果展示下载镜像文件阿里云官网阿里云-计算,为了无法计算的价值(aliyun.com)https://www.aliyun.com/?spm=a2c6h.13651102.J_4VYgf18xNlTAyFFbOuOQe.d_logo.59461b11bmd2Mt下载好镜像文件,建议放......
  • Linux:@2024-08-11 最新的Openssl-3.3.1 Openssh-9.8p1 Centos7上的编译后二进制 一键
     附件:Portable_Openssl-Openssh9.8p1-bin-el7.v1.4.1.tgz.zip 特点:适用于centos7.x 已经编译为二进制对老版本的关键二进制文件sshd、sftp、scp、openssl进行了备份升级前,自动打开一个端口为2222的老版本的sshd服务,你可以连接那个2222的服务,以防死翘翘。对sshd_confi......
  • Linux设备驱动——模块的构造、运行与设计 与众不同的hello world与点灯
    编写一个Linux下的设备驱动,首先要准备好对应内核版本的内核源码树文件。该系列的全部文章都以嵌入式系统的ARM-Linux的环境进行阐述,并以交叉编译的方式在主机Ubuntu20.04系统上编译和ARM开发板上跑测 (E2000Q、H616、或者IMX6ULL看情况交叉着使用) 关于交叉编译的配置,以往......
  • linux配制nfs
    环境rolehostnameOSNFS服务端nfsserverCentos7NFS客户端OracleLinux01OracleLinux6.8要配制/etc/hosts让两个机器通过hostname能ping通服务端安装服务端yuminstallnfs-utils设置开机自动启动并启动服务systemctlenablerpcbindsystemctlenable......
  • 记一次TCP请求游戏服接口偶发超时问题处理:Linux内核网络参数调优
    记一次TCP请求游戏服接口偶发超时问题处理:Linux内核网络参数调优原创 国文 三七互娱技术团队  2024年07月08日18:00 广东 听全文01问题现象A云主机公网访问B云游戏服的一个接口出现偶发超时的问题。02问题原因经抓包定位到B云游戏服接口未响应请求报文导致,具体......
  • 9 - Linux进程和计划任务管理
    目录一、进程1.程序和进程的关系2.查看进程信息2.1ps命令-查看进程信息2.2top命令-查看进程的动态信息2.3pgrep命令-查找进程信息2.4jobs命令-查看后台进程状态信息3.进程的启动方式4.进程的前后台调度5.中止进程的运行5.1Ctrl+C组合键5.2kill......
  • linux配制iscsi
    服务端centos7假定已经装好了两块磁盘/dev/sdb,/dev/sdcyuminstall-ytargetdtargetclitargetcli进入配制命令行通过/dev/sdb,/dev/sdc创建两个block/backstores/blockcreateidisk1/dev/sdb/backstores/blockcreateidisk2/dev/sdc创建一个iscsi服务iscsi/creat......
  • Linux 上 Conda 环境安装与配置超详细教程
    在数据分析、机器学习和科学计算等领域,Conda是一个非常流行的包管理和环境管理系统。它可以帮助你轻松地安装和管理Python、R以及其他语言的软件包,并且能够方便地创建隔离的工作环境。本文将为你详细介绍如何在Linux系统上安装和配置Conda环境。准备工作在开始之前,请确保你......
  • Linux:线程同步机制(互斥锁、读写锁、条件变量、信号量详细分析总结)
    目录速览1、互斥锁(1)What(什么是互斥锁)(2)Why(互斥锁的用途)(3)How(如何使用互斥锁)(4)代码实践2、读写锁(1)What(什么是读写锁)(2)Why(读写锁的作用)(3)How(如何使用读写锁)(4)读写锁的特征3、条件变量(1)What(什么是条件变量)(2)Why(条件变量的作用)(3)How(如何使用条件变量实现线程......