
makefile
文章平均质量分 94
makefile 练习
NickDeCodes
这个作者很懒,什么都没留下…
展开
-
Makefile入门与提升
什么是Makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要做一个好的和professional的程序员,Makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写Makefile了,会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。原创 2023-10-16 22:59:54 · 108 阅读 · 0 评论 -
Makefile之更新存档
在 Makefile 的情况下,具有具有配方但没有先决条件的双冒号规则的 Makefile 将在每次运行 make 时重新生成,然后在 make 重新开始并再次读取 Makefile 后再次重新生成。因此,为了避免这种情况,make 将不会尝试重新生成作为双冒号规则的目标的 Makefile,它具有一个配方但没有先决条件。如果你知道你的一个或多个 Makefile 不能重新生成,并且你希望阻止 make 对它们执行隐式规则搜索,也许是出于效率的考虑,你可以使用任何阻止隐式规则查找的常规方法来实现。原创 2023-10-16 23:08:42 · 133 阅读 · 0 评论 -
Makefile之隐式规则
在GNU Make中,通过编写模式规则(Pattern Rule)来定义隐式规则。模式规则与普通规则类似,但其目标包含字符‘%’(只能有一个)。目标被视为匹配文件名的模式;‘%’可以匹配任何非空子字符串,而其他字符只匹配它们自己。先决条件同样使用‘%’来说明它们的名称与目标名称的关系。因此,一个模式规则 ‘%.o : %.c’ 表示如何从另一个文件 ‘stem.c’ 生成任何文件 ‘stem.o’。原创 2023-10-16 23:08:03 · 190 阅读 · 0 评论 -
Makefile之运行参数
这是make‘-b’, ‘-m’: 这些选项为了与其他版本的make兼容而被忽略。: 将所有目标都视为过时。即使其先决条件的状态不清楚,GNU make 也会继续考虑这些目标,并使其全部重新生成。: 在读取 Makefile 之前切换到目录 dir。如果有多个 ‘-C’ 选项,每个都相对于前一个解释。通常与递归调用 make 一起使用。: 打印除正常处理之外的调试信息。具体的调试级别和类型可以通过参数指定。例如,‘-d’ 相当于 ‘–debug=a’。: 使来自环境的变量优先于 Makefile 中的变量。原创 2023-10-16 23:07:22 · 184 阅读 · 0 评论 -
Makefile之使用函数
你还可以通过使用内建的makefile函数。原创 2023-10-16 23:06:32 · 170 阅读 · 0 评论 -
Makefile之条件部分
条件可以比较一个变量的值与另一个变量的值,或将一个变量的值与一个常量字符串进行比较。条件指令控制make实际上在Makefile中看到的内容,因此不能用于控制执行时的操作步骤。结果是,将’CC=gcc’作为make的参数传递不仅会改变使用的编译器,还会改变链接的库。正如这个例子所示,条件在文本级别起作用:条件的行被视为Makefile的一部分,或者根据条件被忽略。这就是为什么Makefile的更大的语法单元,比如规则,可能跨越条件的开始或结束的原因。命令时,make会根据条件选择适当的编译选项来构建程序。原创 2023-10-16 23:05:37 · 138 阅读 · 0 评论 -
Makefile之使用变量
define指令用于设置变量的值,其语法特殊,允许在值中包含换行符,这对于定义一系列命令和用于eval函数的 Makefile 语法段非常方便。define指令与其他变量定义的工作方式基本相同,只是其语法略有不同。definevalueendef在同一行上,define指令后面跟着被定义的变量名称和(可选的)赋值运算符,然后是换行。变量的值出现在接下来的行中。变量值的结束由一行仅包含单词 “endef” 标志。除了语法上的不同之外,define的工作原理与其他变量定义方式相同。原创 2023-10-16 23:04:56 · 415 阅读 · 0 评论 -
Makefile之配方规则
你可以使用define指令来定义一个可重复使用的命令序列,然后在多个目标的命令中引用这个定义。这个定义实际上是一个变量,所以名称不能与其他变量名冲突。endef在这个示例中,run-yacc是正在定义的变量名称;endef标志着定义的结束;中间的行是命令。define指令不会扩展定义中的变量引用和函数调用;其中的字符、括号、变量名等等都成为了你正在定义的变量的值。这个示例中的第一个命令对使用该可重复使用命令序列的任何规则的第一个前提条件运行Yacc。Yacc的输出文件总是命名为y.tab.c。原创 2023-10-16 23:04:18 · 205 阅读 · 0 评论 -
Makefile之显式规则
在Makefile中,通配符(wildcard)是一种用于匹配文件名的模式匹配机制,允许你在规则中使用通配符来匹配一组文件,而不需要逐个列出文件的名称。最后,需要注意的是虚拟目标不应该是一个真实目标文件的前提条件,否则它的命令部分将每次make考虑到该文件时都会被执行。当目标的任何一个常规先决条件发生变化(即文件被修改),或者如果它们中的任何一个不存在,目标将被认为是过期的,需要重新构建。如果分组目标出现在独立目标规则中或另一个分组目标规则中并具有配方,您将会收到警告,并且后者的规则将替代前者的规则。原创 2023-10-16 23:03:40 · 260 阅读 · 0 评论 -
Makefile之简单介绍
那么 make 将把它的值视为一个由空格分隔的 Makefile 名称列表,这些 Makefile 将在其它 Makefile 之前被读取。上述 Makefile 的结果是定义一个目标 ‘target’,其前提条件是 ‘echo’ 和 ‘built’,就好像 Makefile 包含了 ‘target: echo built’,而不是一个带有规则和配方的规则。如果你想使用一个非标准的名字来命名你的 Makefile,你可以使用 -f 或 --file 选项指定 Makefile 的名字。原创 2023-10-16 23:02:59 · 106 阅读 · 0 评论 -
创建基本的Makefile
我们使用了一个shell脚本去执行繁杂的操作,其实这也就是Makefile的初衷了,Makefile本质上也是shell,它的command中就是支持shell命令的,当然使用Makefile可以更加通用化,不然每人写一个编译脚本,上面我们所有写的Makefile着实太过精简,根本就体现不出Makefile的全貌,接下来我们就对当下的文件情况,去进一步完善一下,中间可能会有一些不理解的地方,放心后面会一一介绍的。我们现在是硬编码去写的,一旦出现更改,我们就得改一次,现在我们就只有一个。原创 2023-10-16 23:02:14 · 100 阅读 · 0 评论 -
理解编译的基本过程
C/C++编译的过程可以分为多个阶段,包括预处理、编译、汇编和链接。原创 2023-10-16 23:01:17 · 151 阅读 · 0 评论