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

如何实现记住上一个构建目标的Makefile?

要实现记住上一个构建目标的Makefile,可以使用.PHONY伪目标和@符号来实现。.PHONY伪目标可以防止Makefile中的目标被文件名所影响,而@符号可以避免不必要的命令输出。

以下是一个简单的示例Makefile:

代码语言:makefile
复制
.PHONY: all clean

all:
	@echo "Building..."
	@make -s build

build:
	@echo "Compiling source code..."
	# 在这里添加编译命令

clean:
	@echo "Cleaning up..."
	# 在这里添加清理命令

.DEFAULT_GOAL := all

在这个示例中,我们定义了三个目标:allcleanbuildall是默认目标,它会调用build目标来构建项目。clean目标用于清理构建产物。.DEFAULT_GOAL指定了默认目标,这里设置为all

使用.PHONY声明allclean目标为伪目标,这意味着它们不会被视为实际文件名。@符号用于避免不必要的命令输出,例如echo命令的输出。

这样,每次运行make时,它都会记住上一个构建目标并执行相应的操作。如果你想要清理构建产物,只需运行make clean即可。

推荐的腾讯云相关产品:

这些产品都可以帮助您更轻松地构建、部署和管理应用程序,同时提供强大的云计算能力和安全性。

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

相关·内容

Go项目目录结构应该这么用!

会用makefile吗Make 是一个构建自动化工具,会在当前目录下寻找 Makefilemakefile 文件。...如果存在,会依据 Makefile构建规则去完成构建,在windows环境下可以用GitBash来代替系统命令,或者安装make-4.2.1-without-guile-w32-bin.zip(地址...Makefile 由多条规则组成,每条规则都以一个 target(目标)开头,后跟一个 : 冒号,冒号后是这一个目标的 prerequisites(前置条件),紧接着新的一行,必须以一个 tab 作为开头...无论哪种目录结构都是为了让项目看起来一了解,层次清楚,没有最好的只有合适团队开发的,但是在命名上尽量能和大众规范上保持一致,避免在语义上出现混淆。...在解决分层、分模块之后彼此之间如何依赖和协作很多时候都是有拆分原则的,得多借鉴前人的经验。

2.1K30

可移植的 Makefile 教程

虽然每个实现实现了与 GNU Make 完全相同的一些扩展,但是它会捕获一些常见的错误。 什么是 Makefile?...input.o: input.c input.h graphics.h physics.h Adding commands to rules 虽然我们已经构造了一个依赖树,但是还没有告诉 make 如何真正地从目标的先决条件中构建出目标...很多 make 的实现都支持通过 -j 选项进行并行构建。虽然这并非标准,但是在 Makefile 的一个非常棒的特性就是,它不需要任何特殊的东西就能正确地工作。...默认构建多个目标是十分常见的情况。如果第一个规则选择了默认目标,我们该如何解决需要多个默认目标的问题呢?传统方式是使用伪目标(phony target)....有很多教程讲述了如何构建时同时生成依赖,但是它很脆弱和缓慢。最好是在一次性完成,在 Makefile 中写好依赖,以便于 make 能够如期工作。

1.3K10
  • 命令行上的数据科学第二版:六、项目管理与`make`

    把一个规则想象成一个食谱;一个或多个指定如何构建标的命令。 规则前面的空格是一个制表符。对空格很挑剔。当心一些编辑在你按下TAB键时插入空格,称为软标签,这将导致make产生错误。...这个过程被称为构建目标。如果你不指定一个目标的名字,那么make将构建第一个在Makefile中指定的目标。...有时,不管同名文件是否存在,都构建一个目标是很有用的。想想作为项目的一部分,您需要执行的任务。在你的Makefile的顶部使用一个名为.PHONY的特殊目标,后跟虚假目标的名字,这是一个很好的做法。...但是要记住make只关心目标的名称 。它不检查规则是否实际创建了同名文件。...这就像是按指定顺序执行一个或多个目标的快捷方式。在这种情况下:top10``heights.png。目标all作为第一个目标出现在Makefile中,这意味着如果我们运行make,这个目标将被构建

    68910

    探索Linux内核:Kconfig的秘密

    深入了解Linux配置/构建系统是如何工作的。 自从Linux内核代码迁移到Git之后,Linux内核配置/构建系统(也称为Kconfig/kBuild)已经存在了很长时间。...通过将源文件划分为不同的模块/组件,每个组件都由自己的Makefile管理。当您开始构建时,顶级Makefile按正确的顺序调用每个组件的makefile构建组件,并将它们收集到最终的执行程序中。...顶部的makefile包含archmakefile,读取.config文件,进入子目录,调用制作,使中定义的例程的帮助下实现每个组件的makefile。...看看如何在Linux内核中实现递归make,并借助简化的Makefile代码: # In top Makefile vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps...depfile命令行作为输入,然后以makefile语法输出.cmd文件,它记录目标的命令行和所有先决条件(包括配置)。

    1.8K11

    深度刨析makefile

    那么这就是使用 makefile 的第一个原因,通过 makefile 可以制定好相应的编译与连接规则,先编译哪个文件后编译哪个文件、哪个需要编译哪个不需要编译、如何链接、如何生成、要生成什么文件等等全部都在...什么是 makefile make 是一个命令工具,它负责解释 makefile 中的指令,而 makefile 文件负责向 make 提供如何去执行的规则。...③ 如果上一个目标文件的依赖存在,那么 make 会递推查找依赖文件的依赖,然后重复上面的操作。 所以说,makefile 是根据依赖一层一层递推的,不停的去递推寻找依赖。...这些内容说明了要生成什么,用什么去生成,如何生成,其实就是包含了三要素。显示规则有 makefile 编写者显示写出。...这样,在构建最终目标 all 的时候,就需要去构建它的依赖,也就是所有的可执行文件,这样就保证了,所有可执行文件所在规则中的构建命令一定会执行,并生成这些可执行文件,而 all 作为一个伪目标,并不会真正生成

    11310

    CC++项目构建指南:如何使用Makefile提高开发效率

    Makefile是一个常用的自动化构建工具,它可以为开发人员提供方便的项目构建方式。在C/C++项目中,Makefile可以用来编译、链接和生成可执行文件。...目标是我们想要生成的文件,依赖是生成目标所需要的文件,命令是生成目标的具体步骤。...commands是生成目标的命令列表,每个命令前必须有一个Tab符号。...--- 使用Makefile构建C/C++项目 下面是一个使用Makefile构建C/C++项目的示例: CC = gcc CXX = g++ CFLAGS = -Wall -O2 CXXFLAGS =...在本文中,我们介绍了Makefile的基础知识和如何使用Makefile构建C/C++项目。 除了使用Makefile可以自动化构建项目,还可以使用其他工具和技术来提高C/C++项目的效率。

    42840

    eBPF动手实践系列三:基于原生libbpf库的eBPF编程改进方案

    01 欲穷千里,更上一层楼 在上一篇文章《eBPF动手实践系列二:构建基于纯C语言的eBPF项目》中,我们初步实现了脱离内核源码进行纯C语言eBPF项目的构建。.../tools/build/feature/Makefile trace_execve_libbpf130项有4个Makefile,分别如下: ....如何能不依赖这个规范,实现一个更加轻量级的编程方案呢?这让我们想到了hexdump命令,可以用它替换bpftool工具,并且生成符合自己期望的头文件。...5.4 改进的eBPF项目Makefile解析 hexdump_skel_libbpf130项也是同样的4个Makefile,其中将bpf目标文件编译到用户态加载进程中的环节主要在项目的主Makefile...从关键构建步骤中,我们可以了解到: probe_execve和trace_execve两个target都是all目标的下级目标,并且probe_execve和trace_execve是串行的。

    34910

    深入掌握 Makefile 与 Make 工具:高效管理自动化编译的核心原理和最佳实践

    make与makefile make 是一个在 Unix/Linux 系统中广泛使用的构建工具,用于自动化编译和构建项目。...make 命令通过读取一个名为 Makefilemakefile 的文件,根据其中定义的规则执行各种任务(如编译、链接等),从而简化和自动化项目的构建过程。...易于维护:通过 makefile 管理复杂项目的构建流程。 .PHONY 在 makefile 中,.PHONY 用于声明「伪目标」(phony targets),即不直接对应文件的目标。...模式规则让 make 能够定义一类目标的构建方式,而无需为每个目标单独编写规则。例如,可以用 %.o: %.c 来描述如何从 .c 文件生成 .o 文件,% 表示文件名的任意部分。...手动触发 有时可能需要强制重新编译,即使文件没有变化,这可以通过以下方式实现: make clean:运行一个清理目标,删除所有中间文件和可执行程序,然后执行 make 重新构建整个项目。

    37750

    【Linux探索学习】第九弹——Linux工具篇(四):项目自动化构建工具—makeMakefile

    一、什么是make/Makefile make/Makefile的本质 Make是一个自动化构建工具,它根据Makefile中的指令来自动化执行构建过程。...命令:用于生成目标的具体命令。...简单点来说make是一个命令,Makefile是当前目录下的一个文件 二、如何使用make/Makefile 使用实例 为了方便我们下面的讲解,我们这里先带大家看一下如何使用make/Makefile实现自动化构建的功能...,所以就有了自动化构建工具 下面我们来看一下如何简单的使用make/Makefile 首先,我们要先在当前目录下创建一个Makefile文件 touch Makefile 然后进入这个文件中,将我们的源文件和目标文件建立依赖关系...这就牵扯到文件时间戳的问题了,下面我们详细讲解一下 三、make如何实现高效编译 make实现高效编译的原理其实就是通过比较源文件和可执行文件的修改时间,来判断是否可以再次执行,从而避免无效的执行

    7210

    Makefile 入门教程

    Makefile 是一个非常强大的构建自动化工具,用于管理项目的编译、链接和其他构建任务。以下是一个详细的 Makefile 使用文档,包括基本概念、语法、示例和常见任务。 1....规则 (Rules):规则定义了如何生成目标以及生成目标所需的命令。 命令 (Commands):命令是在生成目标时要执行的操作。命令必须以 Tab 键开头。...Makefile 语法 一个基本的 Makefile 规则的语法如下: target: dependencies command target:要生成的目标的名称。...dependencies:生成目标所需的文件或其他目标的列表。 command:生成目标的命令,必须以 Tab 键开头。 3....高级用法 除了基本用法外,还支持一些高级用法,可以用来处理更复杂的构建需求。

    41920

    make与makefile

    这样就形成了一层一层递归依赖组成了Makefile文件。 Makefile并不会关心命令是如何执行的,仅仅只是会去执行所有定义的命令,和我们平时直接输入命令行是一样的效果。...因此,通过在Makefile中设置all作为默认目标规则,你可以简化构建过程,只需运行make命令即可执行整个编译过程,无需显式指定目标。...3.伪目标:.PHONY 用 .PHONY 修饰,伪目标的特性是,总是被执行的。 因此,伪目标常用在清理临时文件、测试项目、生成文档、打包发布等。...定义伪目标的主要意义在于: 命名约定:通过定义伪目标,可以对常用的操作或任务进行命名约定,使得其他开发者或使用者能够清晰地理解该目标的用途和作用。...伪目标的存在告诉 Make 工具该目标不是用于生成文件,而是执行相应的操作。 组织和管理构建任务:伪目标可以用来组织和管理构建流程中的各个任务或操作。

    8110

    Makefile 入门教程

    Makefile 是一个非常强大的构建自动化工具,用于管理项目的编译、链接和其他构建任务。以下是一个详细的 Makefile 使用文档,包括基本概念、语法、示例和常见任务。 1....•规则 (Rules):规则定义了如何生成目标以及生成目标所需的命令。•命令 (Commands):命令是在生成目标时要执行的操作。命令必须以 Tab 键开头。...Makefile 语法 一个基本的 Makefile 规则的语法如下: target: dependencies command •target:要生成的目标的名称。...•dependencies:生成目标所需的文件或其他目标的列表。•command:生成目标的命令,必须以 Tab 键开头。 3....高级用法 除了基本用法外,还支持一些高级用法,可以用来处理更复杂的构建需求。

    25120

    如何使用Makefile在Ubuntu上自动执行重复任务

    该工具主要用于自动编译和构建程序。它允许应用程序的作者轻松地布置构建该特定项目所需的步骤。...它们代表与之关联的目标的准备或依赖关系。...一般的想法是,通过添加源,我们可以构建一组必须在当前目标之前执行的顺序依赖项。您可以在任何目标之后指定多个以空格分隔的源。您可以开始了解如何指定精细的任务序列。...结论 ---- 此时,您应该很好地了解如何使用Makefile。更具体地说,您应该知道如何使用make作为自动执行大多数过程的工具。...虽然在某些情况下编写一个简单的脚本可能更容易,但Makefile是在流程之间建立结构化的层次关系的简单方法。学习如何利用这个工具可以帮助简化重复性任务。

    2.4K00

    【Linux】项目自动化构建工具-makeMakefile 详解

    前言   在Linux及类Unix系统中,自动化构建项目是提高开发效率、减少重复劳动的关键环节。make工具及其配置文件Makefile实现这一目标的重要工具组合。...它们通过定义一系列规则和依赖关系,自动执行编译、链接等构建过程,确保软件项目能够高效、准确地构建。 1. 什么是make和Makefile?...make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。 2....和clean就是我们的目标,hello.c就是要生成hello目标文件的依赖,而clean由.PHONY修饰,是一个伪目标,所以不需要依赖,伪目标的特性是,总是被执行的;gcc -o hello hello.c...总结   make和Makefile是Linux及类Unix系统中不可或缺的自动化构建工具。它们通过定义清晰的规则和依赖关系,极大地提高了软件项目的构建效率和可维护性。

    23310

    【Linux操作系统】自动化编译make和Makefile

    二.makefile文件规则 1.基本规则 2.举一个例子 3.伪目标 4.其他规则 三.文件三个时间问题-make程序 1.三个时间何时更新 2.touch的两个作用 3.make程序如何知道依赖文件是否更新...一.make/makefile简介 1.什么是make,makefile? make是一个构建C++项目的工具/命令;makefile是一个包含编译命令的脚本文件。...3.伪目标 介绍伪目标前我们先讲一讲实目标的概念: 实目标:命令执行后真正要生成的文件名, test就是实目标 伪目标:命令执行后不会生成实际文件,常用于辅助操作, .PHONY是伪目标的标注符...伪目标的特点:伪目标可以总是被执行[为什么后面讲] 4.其他规则 变量名 含义 $@ 目标文件,可表示test $^ 所有的依赖文件,可表示test.c $< 第一个依赖文件 test:test.c...不带选项,atime,mtime,ctime都更新 touch test -a//atime更新 touch test -m//mtime更新 touch test -c//ctime更新 3.make程序如何知道依赖文件是否更新

    85040

    Linux项目自动化构建工具-makeMakefile

    make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。 ---- 二、理解 1.使用 makefile就是创建一个文件叫做 makefile 。...我们vim打开makefile。 我们敲出上图代码。正常情况下,我们要编译 test.c 文件,我们直接 gcc test.c ,加上 -o [文件名]可以指定编译出来的可执行程序名字。...而下面一行则是依赖方法,记住,下面一行开头必须是 tab 键。 clean没有依赖的文件,所以后面不接文件名,下面同样是依赖方法。而 .PHONY:  则是将clean修饰成伪目标。...这就是因为我们用 .PHONY 将它设置成了伪目标,伪目标的特性是:总是被执行。 那么 make 是如何识别文件是不是最新的呢?...---- 三、原理 make 是如何工作的 , 在默认的方式下,也就是我们只输入 make 命令。 make会在当前目录下找名字叫“Makefifile”或“makefifile”的文件。

    77840

    【Linux】常用工具(下)

    Linux常用工具 一、Linux 项目自动化构建工具 - make/Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译...(3)进度条代码 简单版本: 首先我们在一个新目录下创建 Makefile 文件,和 ProgressBar 头文件,函数实现文件和主函数文件,如下: 我们先编辑 Makefile 文件,建立依赖关系和依赖方法...这是简单的实现了一个进度条的版本,下面我们进一步改进这个进度条。...进阶版本(实际应用) 在实际应用中我们的进度条一般都应用在下载软件中,下面我们就简单以下载一个软件为例,简单实现一下这个代码: 首先我们实现函数的实现部分: // 不能一次将进度条打印完毕,否则无法平滑的和场景结合...查看指令 在 gdb 中,list(简写 l )可以查看源代码;其中,l + number 可以查看从第 number 行代码;另外 gdb 会记录最近的历史命令,直接回车就是上一个命令;所以我们直接回车

    20010
    领券