Makefile编写 程序的编译和链接 使用C、C++编写可执行文件,首先要把源文件编译成中间代码文件,Linux下是.o文件,即Object File,这个动作叫做编译(complie)。...于是Makefile闪亮登场。 Makefile确定整个工程的编译规则,只需要一个make命令,就可以实现“自动化编译”。...这就是Makefile的规则,也就是Makefile中最核心的内容。..." 或 "makefile"的文件。...所以,为了makefile的易维护,在makefile中我们可以使用变量。makefile的变量也就是一个字符串。可以理解为C语言中的宏。
前言 这几天的实验让我觉得有必要学习一下makefile 参考博客:博客 会不会写makefile,从一个侧面说明了一个人是否具有完成大型工程的能力 makefile带来的好处是自动化编译 规则...上述make的工作方式 make寻找名为makefile或者Makefile的文件 寻找第一个目标文件,上述例子edit为最终的目标文件 如果edit文件不存在,那么make会寻找edit后的.o文件,...的文件系统 如果你不想使用makefile或者Makefile的文件名,可以用make -f file,file是你的文件名。...makefile中包含其他makefile的指令如同c++ 一样: -include foo.make a.mk b.mk c.mk e.mk f.mk 减号仍然表示不管怎样报错都继续执行下去,上面的命令可以采用部分正则规则简化...: -include foo,make *,mk $(bar) 工作方式 读入所有的Makefile。
随后的行指定了如何从目标所依赖的文件建立目标。...TEX 从TeX源文件创建TeX DVI文件的程序。默认命令是“tex”。 TEXI2DVI 从Texinfo源文件创建军TeX DVI 文件的程序。默认命令是“texi2dvi”。...3.2 GNU make命令选项 GNU make 命令还有一些其他选项,下面给出了这些选项。...-I DIR 当包含其他 makefile 文件时,可利用该选项指定搜索目录。 -n 只打印要执行的命令,但不执行这些命令。...hello,查看一下运行结果。
联合编译 makefile 上面的例子只是一个最简单的 makefile 的使用方法,但实际项目里面不可能只有一个文件,实际可能是多个 .c .h 组成,像这样的项目,我们该如何通过 makefile...所以我们还需要制作一些其他的目标文件,那就是这些 .o 文件。...了,但是还不算完美,后面我们再引入其他 makefile 的特性,先在这个项目目录下执行一次 make 命令,看看编译的效果如何。...makefile 自动变量 makefile 中有一些预定义的变量,你可以理解它像是 C 语言中的一些关键字,分别有不同的意义,我们列举几个常用的自动变量(其他还有很多),通过上面的 makefile...% 的值是上面生成 app 所需的 main.o,所以解释以后的代码相当于下面这样: main.o:main.c gcc -c $< -o $@ 根据这条规则,生成出了 main.o 文件,其他
默认情况下,make 使用 /bin/sh,但可以通过这种方式指定使用其他 shell。....-c:从字符串中读取命令并执行。...但是在 makefile 中,我们不希望这样,我们希望一次就对,所以我们可以使用 -n 参数来进行“试运行”模式。这样 makefile 会输出将要执行的命令,但是不会真正执行。...我们接下来编写一个从 SRA 数据库下载 metadata 数据的 make 脚本吧。...下载软件后,运行下面这个代码会下载很多的 makefile 脚本,熟悉使用它们,你会发现生信分析变得更加简单。
Makefile基础 在Linux环境下,当我们输入make命令时,它就在当前目录查找一个名为Makefile的文件,然后,根据这个文件定义的规则,自动化地执行任意命令,包括编译命令。...**注意:**如果在修改文件内容,但是其他文件没有改变内容(Modify time)没有更新,则未改变的文件不会进行重新编译,可能会造成程序出现问题。...所以该规则会使*.c从第一个开始,逐个编译为对应的.o文件。 小结:隐式规则让Makefile更简洁,很多情况下不需要显式定义规则。 使用变量 赋值形式 = 这种赋值在解析时是延迟展开的。...:当源码文件发生变动时,重新运行依赖生成命令即可更新deps.d。...完善Makefile 通过上述方法,我们可以逐步完善一个Makefile。
Makefile包含 目标文件、依赖文件、可运行命令三部分。 ...prog.o、code.o是依赖文件; 第二行的gcc -o test prog.o code.o是可运行命令。 整个Makefile文件都是这样的格式。...参考链接: https://blog.csdn.net/haoel/article/details/2886 Makefile 伪目标: https://www.cnblogs.com/hnrainll
下做C/C++开发时经常用到,会写Makefile是程序员的必备技能。...make是一个解释Makefile中指令的命令工具,常见的IDE都集成了这个工具。...通过主目录下的Makefile分别管理各个目录下的Makefile编译。这就要用到嵌套执行。...| |---Makefile | |---bin | |---server make -C lib 该命令表示执行lib目录下的Makefile。...在调用子目录Makefile,有时我们需要传递参数,两种方法: 方法一: 在上层Makefile中使用”export”关键字对要传递的变量进行声明。
#一个通用的Makefile,可以在linux各大平台下通用编译c程序,这个版本在gcc平台下实现,如需要课更改第二部的gcc,也可以在第三部添加所需要的库,如有错误,欢迎即使纠正 #1.遵循可移植操作系统接口
title: Makefile文件 文章目录 title: Makefile文件 Makefile文件 Makefile文件 make命令执行时,需要一个makefile文件,以告诉make命令需要怎么样的去编译和链接程序
Windows环境开发人员,可能并未听说过Makefile,但是时时刻刻在使用Makefile来完成程序的编译,因为开发者并不需要手动编写Makefile,而是通过IDE自动生成。...2.语法规则 不同厂商的Makefile在语法上可能会有细微的出入,但Makefile的主线和核心是文件依赖。...这就是Makefile的规则。也就是Makefile中最核心的内容。 3.Makefile内容 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1.显式规则。...7.10如何使用shell脚本给Makefile变量赋值 Makefile可以内嵌shell脚本,但是在内嵌的shell脚本只能读取Makefile的变量,如何给Makefile变量赋值呢?...[5]Makefile中的shell语法 [6]多个文件目录下Makefile的写法 [7]Makefile里PHONY的相关介绍 [8]Makefile中关于all和.PHONY .
每个规则由一个目标文件、一个或多个依赖文件和一组命令组成,这些命令描述了如何从依赖文件生成目标文件。 Makefile的主要作用是简化或组织编译代码的过程,它可以帮助程序员自动化编译、链接和打包程序。...通过将整个项目分解为多个模块,并定义每个模块之间的依赖关系,当某个模块发生变化时,只需要重新编译该模块及其依赖的其他模块即可。这有助于减少手动操作和错误,并提高代码质量。...这些命令描述了如何从依赖文件生成目标文件。在Makefile中,命令部分需要有一定的缩进,可以是一行或多行,它们会依次执行。...这意味着,每次当你运行make targetb时,make不会尝试查找一个叫做targetb的文件并尝试运行它的命令,而是会执行与targetb` 关联的命令。...如果你运行 make targeta,它会首先运行 targetb 和 targetc 的命令,然后执行与 targeta 关联的命令,输出 "targeta"。
2.9 wordlist 原型: $(wordlist ,, ) 功能:从字符串中取从开始到的单词串。和是一个数字下标,下标从1开始。...4.make控制函数 make控制函数make运行的方式。通常,它们用于向生成文件的用户提供信息,或者在检测到某种环境错误时使make停止。...makefile:3: *** error is "can't find commad g++"....示例: 假设有以下makefile。...---- 参考文献 [1]Makefile经典教程(掌握这些足够) [2]GNU make manual
函数 Makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束。
makefile的规则 在讲述这个makefile之前,还是让我们先来粗略地看一看makefile的规则。 target ... : prerequisites ......这就是makefile的规则。也就是makefile中最核心的内容。 说到底,makefile的东西就是这样一点,好像我的这篇文档也该结束了。呵呵。...要执行其后的命令(不仅用于clean,其他lable同样适用),就要在make命令后明显得指出这个lable的名字。...所以,为了makefile的易维护,在makefile中我们可以使用变量。makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。...上面就是一个makefile的概貌,也是makefile的基础,下面还有很多makefile的相关细节,准备好了吗?准备好了就来。 Makefile里有什么?
makefile文件是用来帮助编译和管理C++项目代码的,需要配合make命令使用。makefile里也可以执行其它shell操作,具备一部分.sh脚本的功能。...makefile内容的编写按照如下规则 目标1:依赖1 命令1 目标2:依赖2 命令2 目标3:依赖3 命令3 ............................多数情况下,命令都是起到了从依赖生成目标的功能。例如从.cpp文件生成.o文件,那么命令一定包括g++和一些编译参数的完整的编译命令。...以下面简单的C++代码为例,说明makefile的具体使用。...文件,文件就是makefile CC=g++ all = test.o test: $(all) $(CC) -o test $(all) test.o: .
说白了,Makefile 就是用来管理项目的。 你见到的 xxx.mk 文件或者 Makefile 都统称为 Makefile 脚本文件。...命名只能为 makefile 或者是 Makefile,因为只有这两种命名方式才能被 make 命令识别。 二、示例源码 这里放出供下面 Makefile 基础规则中用来测试的源码。...目标就是指要干什么,或说运行 make 后生成什么,而依赖是告诉 make 如何去做以实现目标。在 Makefile 中,目标和依赖是通过规则(rule)来表达的。...add.c 为下面 add.c int add(int a, int b) { return a+b+1; } 此时,再使用 make,发现了问题 可以看到,只修改 add.c,但是编译的时候,其他...a.out $(obj) : %.o : %.c gcc -c $< -o $@ a.out : $(obj) gcc $^ -o $@ clean : -rm -rf $(obj) a.out 运行如下
我们可以使用“-f”选项指定文件,不再使用名为“Makefile”的文件,比如: make -f Makefile.build 我们可以使用“-C”选项指定目录,切换到其他目录里去,比如: make -...变量的导出(export): 在编译程序时,我们会不断地使用“make -C dir”切换到其他目录,执行其他目录里的 Makefile。...一个 Makefile 文件可以包含规则以外的其他文本,但一个简单的 Makefile 文件仅仅需要包含规则。虽然真正的规则比这里展示的例子复杂,但格式是完全一样的。...运行“make clean”时,由于目标 clean 没有依赖,它的命令“rm -f hello”将被强制执行。...3.4.2 文件名函数 (1)$(dir names…) 抽取names...中每一个文件名的路径部分,文件名的路径部分包括从文件名的首字符到最后一个斜 杠(含斜杠)之前的一切字符。
什么是makefile?...那么, make会在当前目录下找名字叫“Makefile”或“makefile”的文件。...上述还只是简单的makefile,属于「显式规则」,那么为了优化makefile我们介绍「隐式规则」 makefile中使用变量 在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点...Makefile中变量有四种定义(赋值)方式: 1,简单赋值( := ) 编程语言中常规理解的赋值方式,只对当前语句的变量有效(推荐使用) 2,递归赋值( = )赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响...└── mult.c └── sub ├── Makefile └── sub.c 示例程序的Makefile分为3类: 顶层目录的Makefile 顶层目录的Makefile.build
中定义的变量 文件指示 :: Makefile中引用其他Makefile; 指定Makefile中有效部分; 定义一个多行命令 注释 :: Makefile只有行注释 "#", 如果要使用或者输出..."#"字符, 需要进行转义, "\#" 1.2 GNU make 的工作方式 读入主Makefile (主Makefile中可以引用其他Makefile) 读入被include的其他Makefile...-f *.o 2.5 引用其他的 Makefile 语法: include (filename 可以包含通配符和路径) 示例: # Makefile 内容 all:...的运行 # Makefile 内容 all: $(error there is an error!)....>) 功能: 输出警告信息, Makefile继续运行 # Makefile 内容 all: $(warning there is an warning!)