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

Makefile基本用法

前两行等价,第三行的-include使make忽略不存在或无法重新生成且没有错误消息的makefile ? ? ?...当执行此条规则,则首先需要执行先决条件的规则。然而当先决条件存在,不论是否被更改,都属于满足条件。 随后按原始顺序执行规则。 ? 通配符 *.o 匹配所有的.o文件, ? $?匹配修改过的文件 ?...搜索路径 所有先决条件的搜索路径 ? 当foo.c不存在当前的路径,则按照VPATH顺序依次搜索,如下是不存在的情况,但是src,因此进行了等价。 ? ?...当一个先决条件的名称的格式为'-lname'时,make通过搜索文件来专门处理它libname.so文件 如果找不到,则在当前目录的libname.a文件 通过匹配vpath搜索路径和vpath搜索路径指定的目录...替换的目标,\1表示替换的源的第一部分,然后添加.o和空格和该规则下的先决条件名。 sed将上一句生成的依赖关系的一些部分进行了替换,写入到了每个先决条件文件下。

2.5K40
您找到你想要的搜索结果了吗?
是的
没有找到

可移植的 Makefile 教程

构建(build)的最后产物(可执行程序,文档等等)位于树根。Makefile 指定了依赖树的内容,并且提供了 Shell 命令来从目标的 先决条件(prerequisite) 生成目标。 ?...现在,我们会在开头加上 .SUFFIXES 这个特殊目标,擦除所有的内置推断规则。 一个规则,命令会随即跟在目标或先决条件那一行的后面。每个命令行必须以一个 tab 字符开头。...我会用 game 作为新的 all 目标的一个先决条件。更多实际目标,可以作为必要条件加入到默认目标。这个 Makefile 的使用者也可以使用 make all 来构建整个项目。...$< 宏展开为先决条件,这对使得推断规则变得更加通用十分重要。不幸的是,这个宏目标规则并不存在,这些都是有用的。...不幸的是,这个特性去除了目标的路径头,所以,实际,使用它往往会它本来的要更复杂(比如,比要求使用 -MT).

1.3K10

【Android Gradle 插件】自定义 Gradle 任务 ② ( Terminal 面板执行 gradlew task 命令显示所有任务 | 命令行输出所有任务 | 单独执行指定任务 )

文章目录 一、 Terminal 面板执行 gradlew task 命令显示所有任务 二、执行 gradlew task --all 命令命令行输出所有任务 三、单独执行指定的任务 Android...Terminal 面板执行 gradlew task 命令显示所有任务 ---- Terminal 面板执行 gradlew task 命令显示所有任务 : 每个任务之后都有该任务的具体作用...gradlew task --all 命令命令行输出所有任务 ---- 执行 gradlew task --all 命令 , 可以输出所有任务 , 主要是 执行 gradlew task 命令的基础上..., 将 other 分组下的任务显示出来 ; 三、单独执行指定的任务 ---- 这里以执行 app 下的 assemble 任务为例 : 想要单独执行指定的 Task 任务 , 可以右键点击 Gradle...面板 任务列表的任务项 , 然后选择第一个选项执行该任务 ; 也可以 Terminal 面板 , 执行 gradle :app:assemble 命令 ;

1.7K10

探索Linux内核:Kconfig的秘密

/defconfig(最小配置) allnoconfig 使用“no”回答所有选项的新配置 allyesconfig 新配置,该配置所有选项都以“是”接受 allmodconfig 可能的情况下选择新的配置模块...通过将源文件划分为不同的模块/组件,每个组件都由自己的Makefile管理。当您开始构建时,顶级Makefile按正确的顺序调用每个组件的makefile,构建组件,并将它们收集到最终的执行程序。...依赖跟踪 KBuild跟踪三种依赖关系: 所有的前提文件(*.c和*.h) CONFIG_在所有先决条件文件中使用的选项 用于编译目标的命令行依赖关系。 第一个很容易理解,但是第二个和第三个呢?...depfile命令行作为输入,然后以makefile语法输出.cmd文件,它记录目标的命令行和所有先决条件(包括配置)。...这背后的秘密是,Fixdep将解析depfile(.d文件),然后解析其中的所有依赖文件,搜索所有config_string的文本,将它们转换为相应的空头文件,并将它们添加到目标的先决条件

1.7K11

【专业技术】linux下如何打造一个最简单的Makefile

相信linux下编程的没有不知道makefile的,刚开始学习unix平台 下的东西,了解了下makefile的制作,觉得有点东西可以记录下。   ...# 连接每一个*o文件,生成可执行文件。 下面的makefile 就是根据这样的原则来写的。...是生成此目标的先决条件       gcc -o helloworld main.o print.o#shell命令,最前面的一定是一个tab键     mian.o : mian.c print.h...制作完毕,现成我们输入 make,自动调用Gcc编译了, 输入 make clean就会删除 hellowworld mian.o print.o 二:小步改进:   在上面的例子我们可以发现 main.o...print.h       gcc -c print.c     clean :                   rm helloworld $(objects) 修改完毕,这样使用了变量的话很多文件的工程中就能体现出方便性了

79180

Make 快速入门

Makefile 使用 make 之前,你必须在当前目录下添加一个 Makefile 文件,它描述了文件之间的依赖(输入输出)关系,并提供更新文件的 Shell 命令。...prerequisites: 先决条件是用于生成 target 文件的输入文件或是完成 target 任务前需要先执行的任务 。一个 target 可以没有先决条件,也可以有一个或多个先决条件。... Makefile 所在目录运行不带参数的 make 命令: make 会启动 Makefile 文件第一个 target ,本例是 help , make 将 Makefile 第一个出现的 target...既可以出现在目标,先决条件,也可以出现在“菜谱”的 shell 命令;可以是命令本身,也可以是命令的选项,或者输入输出文件;甚至也可以出现在另一个变量的引用(计算变量)。...4.2 用于字符串替换和分析的函数 4.2.1 $(subst from,to,text) text 上执行文本替换,将出现的所有 from 替换成 to 。

1.5K10

Linux 开发 | 学习 Makefile

---- Makefile概述 基本格式 基本上每一个 Makefile 主体就是由若干个以下规则模块组成 : 表明输出的目标,输出目标的依赖对象和生成目标需要执行的命令。...伪目标是一个标签,执行一些动作,比如清除文件,安装程序等。因为没有依赖关系,所以 make 无法直接决定是否需要执行。...命令回响 Makefile 执行如下命令, echo 命令执行 终端会输出如下 : echo 命令执行 命令执行 第一行是执行的命令完整打印(回响),第二行才是我们需要的输出的,关闭命令回响的方法是该行命令前添加...如果一个规则是以“.IGNORE”作为目标的,那么这个规则所有命令将会忽略错误。...Make 的参数的是“-k”或是“--keep-going”,这个参数的意思是,如果某规则的命令出错了,那么就终该规则的执行,但继续执行其它规则。

5.3K10

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

如果你不指定一个目标的名字,那么make将构建第一个Makefile中指定的目标。...前三行用于更改与make本身相关的一些默认设置: 所有规则都在 Shell 执行,默认情况下,Shell 是sh。用SHELL变量我们可以把它改成另一个 Shell,就像bash。...我们的例子,目标为all``top10。无论目录是否包含同名文件,这些目标都将被执行。...这就像是按指定顺序执行一个或多个目标的快捷方式。在这种情况下:top10``heights.png。目标all作为第一个目标出现在Makefile,这意味着如果我们运行make,这个目标将被构建。...一旦满足了所有的依赖关系,就会执行规则,包括下载一个文件,并将其保存到与目标同名的文件。 目标top10被标记为冒牌货,所以如果指定,它将始终被构建。这取决于data/starwars.csv目标。

66810

专治看不懂makefile的人

的“目标1”test是个可执行文件,也是最终我们需要的东西。...同理,“目标2”test.o依赖的是test.cpp,生成目标的命令是g++ -c test.cpp。 上面两个规则完成了从源代码到可执行文件的编译。...上面说的是按最原始的写法,实际makefile的编写有很多技巧使得编写量大大减少, 编译命令的各种参数选项统一都写在变量 模式匹配 特殊符号代码依赖集 目标集 shell指令makefile里完成自动查找生成所有文件名...伪目标 本文makefile里的“目标3”clear是个伪目标,伪目标后面无文件依赖,make不自动找文件依赖,无法执行后面的命令。要执行伪目标,就要make+为目标名。...执行make clear,会执行下面的rm命令,这种命令用来清理项目之前编译的.o等文件,需要彻底重新编译项目时都会执行这个命令。

1.8K30

手把手教你写一个 Makefile 文件

对于后者,通常是你需要告诉编译器头文件的所在位置(头文件应该只是声明,而定义应该放在C/C++文件),只要所有的语法正确,编译器就可以编译出中间目标文件。...链接程序时,链接器会在所有的Object File找寻函数的实现,如果找不到,那就会报链接错误码(Linker Error),VC下,这种错误一般是:Link 2001错误,意思是说,链接器未能找到函数的实现...如果执行make出现如下信息,那就是命令行(makefile的gcc或者rm)前面没有用tab键缩进,不能用空格: b....makefile文件的最后可以看到有个clean,这个clean就是前面所说的标签,它不是一个文件,所以make无法生成它的依赖关系和决定它是否要执行,只能通过显示指定这个目标才可以 ,通过make...main Makefile,最终要生成可执行文件main我们把它叫做终极目标,其它所有的 .o 文件本身也是一个目标,也需要编译生成,工程里面许多的 .c 就会生成许多的 .o,每一个 .c 都写一遍目标依赖命令显然是不可行的

1.5K10

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

当然了,实际上 Makefile 内都是你根据 make 语法规则,自己编写的特定 Shell 命令等。它是一个工具,规则也很简单。支持的范围内,编译 A, 依赖 B,再编译 C,完全没问题。...Makefile 由多条规则组成,每条规则都以一个 target(目标)开头,后跟一个 : 冒号,冒号后是这一个目标的 prerequisites(前置条件),紧接着新的一行,必须以一个 tab 作为开头...,后面跟随 command(命令),也就是你希望这一个 target 所执行的构建命令。...怎么写,一个参考的demo(go-makefile-example) ,我们日常开发基本不会写这么复杂的,大多数都是类似下面这种写一些简单的。...无论哪种目录结构都是为了让项目看起来一了解,层次清楚,没有最好的只有合适团队开发的,但是命名上尽量能和大众规范上保持一致,避免语义上出现混淆。

1.9K30

Linux 下的make命令与Makefile

要达到这一目的很简单,需make命令后直接跟目标的名字就可以完成(如前面提到的“make hello_kitty”形式)任何在makefile的目标都可以被指定成终极目标,甚至没有被我们明确写出来的目标也可以成为...-i , –ignore-errors 执行时忽略所有的错误。 -I , –include-dir= 指定一个被包含makefile的搜索目标。....o 的目标的依赖目标会自动推导为.p ,并且其生成命令是 隐含规则使用的变量 隐含规则的命令,基本上都是使用了一些预先设置的变量。...一个模式规则就好像一个一般的规则,只是规则,目标的定义需要有% 字符。% 的意思是表示一个或多个任意字符。依赖目标同样可以使用% ,只是依赖目标的% 的取值,取决于其目标。...因为目标和依赖目标同时有%时,依赖目标的“茎”会传给目标,当做目标的“茎”。

10.1K20

Makefile 使用总结

所有比目标新的依赖目标的集合。以空格分隔。 $^     所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。...$+     这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。 $*     这个变量表示目标模式"%"及其之前的部分。...GNU提供一个机制可以查看C代码文件依赖那些文件, 这样我们Makefile标的时候就不用打开C源码来看其依赖那些文件了....比目标新的依赖目标的集合 $^ 所有依赖目标的集合, 会去除重复的依赖目标 $+ 所有依赖目标的集合, 不会去除重复的依赖目标 $* 这个是GNU make特有的, 其它的make不一定支持 3....下面列举一些常用的伪目标, 如果在自己项目的Makefile合理使用这些伪目标的话, 可以让我们自己的Makefile看起来更专业, 呵呵 :) 伪目标 含义 all 所有标的目标,其功能一般是编译所有的目标

3.5K30

Linux makefile 教程 非常详细,且易懂

如果你想让make不理那些无法读取的文件,而继续执行,你可以include前加一个减号“-”。...“伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定它是否要执行。我们只有通过显示地指明这个“目标”才能让其生效。...还有一个要提一下的make的参数的是“-k”或是“–keep-going”,这个参数的意思是,如果某规则的命令出错了,那么就终该规则的执行,但继续执行其它规则。...四、嵌套执行make 一些大的工程,我们会把我们不同模块或是不同功能的源文件放在不同的目录,我们可以每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,...,他代表了一个文本字串,Makefile执行的时候其会自动原模原样地展开在所使用的地方。

4.3K20

Makefile经典教程(掌握这些足够)

如果你想让make不理那些无法读取的文件,而继续执行,你可以include前加一个减号“-”。...“伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定它是否要执行。我们只有通过显示地指明这个“目标”才能让其生效。...还有一个要提一下的make的参数的是“-k”或是“--keep-going”,这个参数的意思是,如果某规则的命令出错了,那么就终该规则的执行,但继续执行其它规则。...4.4 嵌套执行make        一些大的工程,我们会把我们不同模块或是不同功能的源文件放在不同的目录,我们可以每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile...使用变量 ————         Makefile的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,Makefile执行的时候其会自动原模原样地展开在所使用的地方。

2.6K20

Makefile教程

Makefile我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile执行时,其中的变量都会被扩展到相应的引用位置上。 4.文件指示。...4.make的工作流程 执行Makefile时,默认的方式下,我们只输入make命令,则相当于make first_objname_in_Makefile,意思是生成出现在Makefile第一个目标文件...SRCDIR变量command中出现时,以类似于宏替换的方式将其载入command。 (3)预定义变量VPATH指明目标的依赖项所在目录 VPATH= src:./include:....: $(CC) $(INCLUDE) $(CFLAGS) -c $< 一眼望去,为什么Makefile目标文件没有依赖项。...8.小结 实际上,Makefile还有很多基础知识点和复杂的特性并未在文中赘述,比如各种函数的用法、嵌套执行make、双后缀规则、定义命令包等,这些需要我们实际使用过程中去熟悉掌握。

3.9K53

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

如果你想让make 不理那些无法读取的文件,而继续执行,你可以include前加一个减号“-”。...当然,多个目标的生成规则的执行命令是同一个,这可能会可我们带来麻烦,不过好在我们的可以使用一个自动化变量“$@”(关于自动化变量,将在后面讲述),这个变量表示着目前规则中所有的目标的集合,这样说可能很抽象...而如果一个规则是以“.IGNORE”作为目标的,那么这个规则所有命令将会忽略错误。这些是不同级别的防止命令出错的方法,你可以根据你的不同喜欢设置。...还有一个要提一下的make的参数的是“-k”或是“--keep-going”,这个参数的意思是,如果某规则的命令出错了,那么就终该规则的执行,但继续执行其它规则。...第七部分使用变量 Makefile的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,Makefile执行的时候其会自动原模原样地展开在所使用的地方。

3.1K20

CC++之makefile写法

现在我们只要将上面这两行语句写入一个名为Makefile或者makefile的文件,然后终端输入make命令,就会看到它按照我们的设定去编译程序了。...而且如果我们修改的是calc.h文件,make就无法察觉到变化了(所以有必要为头文件专门设置一个常量,并将其加入到依赖关系表)。下面,我们来想一想如何解决这个问题。...考虑到标准的编译过程,源文件往往是先被编译成目标文件,然后再由目标文件连接成可执行文件的。...比目标新的依赖目标的集合 $^ 所有依赖目标的集合, 会去除重复的依赖目标 $+ 所有依赖目标的集合, 不会去除重复的依赖目标 $* 这个是GNU make特有的, 其它的make不一定支持 到目前为止...有了这两个设定,无论我们今后该工程加入多少.c和.h文件,Makefile都能自动将其纳入到工程来。

76620

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券