首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux make的源代码

make 是一个在 Unix 和类 Unix 系统(如 Linux)上广泛使用的自动化构建工具。它可以根据文件依赖关系自动编译源代码,并执行一系列的任务,如编译、链接等。make 通过读取名为 Makefile 的文件来获取构建规则。

基础概念

  • Makefile: 包含了一系列的规则,这些规则定义了如何构建目标文件。每个规则包含目标、依赖和命令。
  • 目标(Target): 构建过程的结果文件,可以是一个可执行文件、库文件或者是任何需要生成的文件。
  • 依赖(Dependency): 构建目标所需的输入文件,通常是源代码文件或其他中间文件。
  • 命令(Command): 用于生成目标的命令,通常是一系列的 shell 命令。

优势

  • 自动化: 减少手动编译的工作量,特别是在大型项目中。
  • 依赖管理: 自动处理文件依赖关系,确保所有必要的文件都是最新的。
  • 可扩展性: 可以很容易地添加新的构建规则和任务。
  • 跨平台: make 是一个标准工具,在大多数 Unix-like 系统上都可用。

类型

make 工具本身是一个命令行工具,但是有许多变体和扩展,如:

  • GNU Make: 最常见的 make 实现,提供了丰富的功能和灵活的规则定义。
  • BSD Make: BSD 系统上的 make 实现,与 GNU Make 在语法和功能上有所不同。
  • CMake: 不是一个 make 工具,而是一个跨平台的构建系统生成器,可以生成 Makefile,也可以生成其他构建系统的配置文件。

应用场景

  • 软件编译: 编译 C/C++、Java 等编程语言的源代码。
  • 自动化测试: 运行测试套件,收集测试结果。
  • 部署: 执行部署脚本,将应用程序部署到服务器。
  • 文档生成: 从源代码注释中生成文档。

源代码

make 的源代码可以在其官方网站或者 GNU 的官方 Git 仓库中找到。GNU Make 的源代码是用 C 语言编写的,你可以下载并查看其内部实现。

常见问题及解决方法

  • Makefile 中的命令没有执行: 确保 Makefile 中的命令前有正确的 Tab 字符,而不是空格。
  • 依赖关系错误: 检查 Makefile 中的目标和依赖是否正确,确保所有依赖文件都存在。
  • 编译错误: 查看编译器的错误输出,根据提示修复源代码中的错误。

示例 Makefile

代码语言:txt
复制
# 编译 C 源文件的简单 Makefile 示例

CC = gcc
CFLAGS = -Wall -g

# 目标可执行文件
TARGET = myprogram

# 源文件列表
SRCS = main.c foo.c bar.c

# 目标文件列表,通过替换 .c 为 .o 得到
OBJS = $(SRCS:.c=.o)

# 默认规则
all: $(TARGET)

# 链接规则
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJS)

# 编译规则
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

# 清理规则
clean:
    rm -f $(OBJS) $(TARGET)

在这个例子中,make 会根据源文件列表自动编译每个 .c 文件为 .o 文件,并最终链接成一个可执行文件 myprogram。执行 make clean 可以清理生成的文件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux——.configure && make && make install命令解析

大家好,又见面了,我是你们的朋友全栈君。 当我们在Linux上安装相关的软件源码包时,一般会涉及到以下三个步骤,分别是 ..../configure、make、make install ———————————————————————————————————————————————————— 第一步 ..../configure 该步骤主要用来检测系统的配置、环境以及相关依赖,如果缺少相关依赖,该脚本会中止执行,软件安装失败 如:它会检测是否安装了gcc (用于编译各种源代码的软件),如果未安装...,该脚本会中止执行 当该脚本执行完成之后,它会根据之前检查的结果,生产一个 Makefile 文件,该文件规定了用什么编译器、编译参数等信息 ,描述了文件编译的相互依赖关系 第二步 make...该步骤主要用来编译源代码,make指令会从 Makefile 文件中读取相关指令,然后进行编译,编译完成之后会生成可执行文件 第三步 make install 该步骤主要用来安装软件,make

7.5K20

Linux下解决.configure ,make,make install的报错

Linux下从源代码下编译安装一个软件有时候会报错,遇到一些麻烦。有些情况即使你用了很多方法去尝试解决,但问题依然存在,那怎么办呢?...本教程教你怎么解决Linux软件编译时遇到的问题 注意:编译安装一个软件不会被系统的包管理系统记录信息,这对于卸载和记录软件的行为都是不利的,建议您尽量使用打包好的包(.rpm .deb) 我们分3类错...一些情况下,还会有源代码的补 丁。...可以这样来打补丁 patch -Npl -i 注意当你打补丁时你应该在源代码路径中 三: Make install 错误 这些错误理解起来很容易,但是我还是列一下吧~通常有两大失败原因...在源代码路径下运行ls命令,可执行文件应该会以亮绿色显示的。您需要将这些文件拷贝到/usr/bin或者/usr/local/bin 中,至于哪个就是看您爱好了。

31.6K21
  • Linux中的configure,make,make install到底在做些什么

    http://www.sohu.com/a/191735643_505857 在Linux下经常要安装部署一些软件包或者工具,拿到安装包之后一看,简单,configure,make, make install...有时候我就在想,这个configure,make ,make install是什么意思呢,configure是测试存在的特性,然后make开始编译,make install生成相应的可执行文件。...然后是autoconf,是生成configure文件的,configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来...`install-data-am'. make[1]: Leaving directory `/root/c' 比如编译后的main.o,如果使用strings来查看内容就是执行后的结果。...[root@oel64 c]# strings helloworld /lib64/ld-linux-x86-64.so.2 __gmon_start__ libc.so.6 puts __libc_start_main

    3.3K40

    Linux中的configure,make,make install到底在做些什么

    在Linux下经常要安装部署一些软件包或者工具,拿到安装包之后一看,简单,configure,make, make install即可搞定。...有时候我就在想,这个configure,make ,make install是什么意思呢,configure是测试存在的特性,然后make开始编译,make install生成相应的可执行文件。...然后是autoconf,是生成configure文件的,configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来...`install-data-am'. make[1]: Leaving directory `/root/c' 比如编译后的main.o,如果使用strings来查看内容就是执行后的结果。...[root@oel64 c]# strings helloworld /lib64/ld-linux-x86-64.so.2 __gmon_start__ libc.so.6 puts __libc_start_main

    3.9K30

    Linux 下的make命令与Makefile

    概述 博客内容包含linux下make命令的使用与makefile的书写规则等,希望通过本文档使读者对make命令makefile文件有进一步了解,由于鄙人经验学识有限文档中会有描述不准确以及理解偏差,...fythons@sina.com 从一只猫说起hello kitty linux系统中的make命令与makefile文件 make与makefile 在linux系统中make是一个非常重要的编译命令...make命令隐藏了什么 linux 编译hello_kitty 只需要简单的make hello_kitty 上述过程可分解为四部分,预处理(Propressing),编译(Compilation),...如下图所示: 预编译 预编译器cpp 将hello_kitty.c与stdio.h编译成.i 文件,c++的源代码文件扩展名为cpp或cxx,头文件扩展名为hpp,而与编译后的文件为.ii。...make命令的运行 make最简单的用法就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。

    10.2K20

    .configure,make,make install的作用

    /configure,make,make install的作用 1、configure,configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性 这一步一般用来生成...2、make,这一步就是编译,大多数的源代码包都经过这一步进行编译 (当然有些perl或Python编写的软件需要调用perl或python来进行编译)。...如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行), 然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址), 或者你的系统少了一些依赖库等...3、make insatll这条命令来进行安装 make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。 其实..../configure  &&  make  &&  make  install

    3.3K40

    make、make all和make clean的使用方法

    刚接触Linux,认为直接make后就完成了编译,没想到编译出的结果存在很大问题,原来是make、make all和make clean的使用方法不对。...1、理论 make、make all 和 make clean 是在使用 make 构建系统时常见的命令。它们用于编译和管理项目中的代码。...以下是每个命令的功能和区别: 1、make 功能:make 命令默认会查找当前目录下的 Makefile 或 makefile 文件,并执行该文件中的第一个目标(target)。...3、make clean 功能:make clean 用于清理项目,通常会删除所有由之前的构建过程生成的文件,如对象文件(.o)、编译产物等。...make clean:清理项目,删除之前构建过程中生成的文件,准备一个干净的构建环境。 2、实践 让我们通过一个具体的例子来解释 make、make all 和 make clean 的功能和区别。

    4.5K10

    Linux之make和makefile及其拓展

    文章目录 make和makefile 基础知识 make/makefile的使用 伪目标 三个时间 推导规则 小程序进度条 缓冲区问题 倒计时程序 进度条 make和makefile 基础知识...makefile制定了一系列的规则来指定。 makefile带来的好处就是自动化编译,一旦写好这个文件,只需要一条make命令,整个工程就能自动完成编译,极大的提高了效率。...make是一个命令,makefile是一个文件 make/makefile的使用 系统本身并没有makefile,需要我们自己创建makefile文件(也可以叫Makefile)。...三个时间 不加伪目标make无法多次执行的原因在于目标文件没有更新,不用重新编译(在一些大型工程项目中,仅是编译的过程就可能要耗费数十分钟甚至几小时) 那么它怎么知道我没有更新目标文件呢?...在make推导的时候会根据依赖关系而推导,从上到下,当依赖文件列表不存在会继续根据依赖文件列表所对应的项而继续。但这样是将简单的过程复杂化了,平时没必要这样写,这里也只是做讲解用。

    3.8K00

    【分享】精简Linux的源代码

    作者:付汉杰 Linux是现在最流行的操作系统,含有大量的源代码。Xilinx 2020.1使用的Linux 5.4,含有大约67430个文件。大部分文件没有被使用到。...分析Linux源代码的代码实现时,经常查找函数或者数据结构定义。如果分析所有文件,既消耗软件查找时间;也会找到多个定义,增加理解代码的难度。...如果我们知道Linux的编译流程的起始时间,那么删除所有访问时间比Linux的编译起始时间早的文件,就能达到精简Linux的源代码的目的。在编译Linux之前,可以通过touch命令创建一个文件。...这个文件的atime,就是编译Linux开始时间。因此比较这个文件,和其它Linux文件,就能找到所有访问时间比Linux的编译起始时间早的文件,从而实现精简Linux的源代码。...再恢复对应文件,既精简了Linux的源代码,也不影响Linux的编译流程。对Linux 5.4进行精简后,剩余大约8800个文件,减少了大约58000个文件,精简了超过87%的文件数量。

    2.7K20

    【黄啊码】linux的Make使用的重定向

    Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义:  数字 含义 标准叫法 0 标准输入 stdin = standard...,所以,当你执行命令,比如make,后,所输出的信息,都是可以在屏幕上看到的。...下面以make命令为例来说明,如何把对应的信息,输出到对应的文件中: 1.想要把make输出的全部信息,输出到某个文件中,最常见的办法就是: make xxx > build_output.txt...2.只需要把make输出中的错误(及警告)信息输出到文件中ing,可以用: make xxx 2> build_output.txt 相应地,由于1=stdout没有变,还是屏幕,所以,那些命令执行时候输出的正常信息...3.只需要把make输出中的正常(非错误,非警告)的信息输出到文件中,可以用: make xxx 1> build_output.txt 相应地,由于2=stderr没有变,还是屏幕,所以,那些命令执行时候输出的错误信息

    52230

    【Linux】源代码包的安装

    在 Linux 系统中,除了使用二进制软件包管理工具(如 RPM、DEB)安装软件外,还可以选择通过源代码包的方式进行安装。这种方式通常涉及源代码的编译和安装过程,为用户提供了更多的灵活性和定制选项。...本文将介绍源代码包的安装方法、常见步骤以及一些实际的例子,以帮助用户更好地理解和应用源代码安装方式。 1. 源代码包安装简介 源代码包是软件的原始代码文件,通常以压缩包的形式提供。.../configure 然后使用 make 命令进行编译: make 最后,使用 make install 命令安装软件到系统: sudo make install 3..../configure make sudo make install 3.2 安装 Nginx Web 服务器 # 下载 Nginx 源代码包 wget https://nginx.org/download.../configure make sudo make install 4. 注意事项 使用源代码包安装需要注意以下事项: 依赖项: 用户需要手动安装和管理源代码软件包所需的依赖项。

    56110

    Linux工具入门:make工具与Makefile文件

    1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译可以大大简化开发工作...make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译、连接规则。 2. Makefile文件 Makefile描述了整个工程的编译连接规则。...COMMAND:命令是make执行的动作(命令是shell命令或是可在shell下执行的程序),注意每个命令行的起始字符必须为TAB字符。...如果此时再次输入make,会看到: $ make make: 'main' is up to date. make的编译规则是根据时间来进行判断,一旦依赖列表中某个文件的更新时间比目标文件晚,则会重新生成目标...7. make常用的内嵌函数 首先看make中函数调用的形式: //函数调用 $(function arguments) 【function是函数名称,arguments是参数,使用$来调用】

    3.4K40

    Linux工具入门:make工具与Makefile文件

    1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译可以大大简化开发工作...make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译、连接规则。 回到顶部 2....COMMAND:命令是make执行的动作(命令是shell命令或是可在shell下执行的程序),注意每个命令行的起始字符必须为TAB字符。...如果此时再次输入make,会看到: $ make make: 'main' is up to date. make的编译规则是根据时间来进行判断,一旦依赖列表中某个文件的更新时间比目标文件晚,则会重新生成目标...回到顶部 7. make常用的内嵌函数 首先看make中函数调用的形式: //函数调用 $(function arguments) 【function是函数名称,arguments是参数,使用$

    3.1K40

    【Linux笔记】make工程管理工具(一)

    1、如何编译具有多个源码(.c文件)的工程 上一篇笔记写了如何使用gcc的编译命令编译:【Linux笔记】Linux下编译C程序。...在Linux环境下,一般不具有集成开发环境(IDE),一般都是使用命令来编译。当源文件较少时,可以使用上面的方式进行编译。...所以,我们先看怎么用make工具的问题。当然,首先得想办法编写Makefile文件。...在这之前,我们可以使用make -v命令查看我们当前系统是否具有make工具(本文使用的Linux发行版为红帽6): ? 可见,我们系统的make工具版本是3.81。...我们还是以上一篇笔记的例子,这次我们使用make编译我们的hello文件(输出Hello World是我们千年不变的目标,哈哈~)如下是我们编写的Makefile文件中的内容: ?

    1.9K20
    领券