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

Makefile文件编写

(这有点像一个堆栈的过程) 最终生成target文件 make 参数介绍 make 的参数有很多, 可以通过 make -h 去查看, 下面介绍几个我认为比较有用的。...programB.c programC.c SRCS += programD.c 变量覆盖 override 目标变量 作用是使变量的作用域仅限于这个目标(target), 不像之前例子中定义的变量,...输出执行的命令以及命令执行的结果, 出错的话停止执行 前缀 @ 输出命令执行的结果, 出错的话停止执行 前缀 - 命令执行有错的话, 忽略错误, 继续执行 伪目标 伪目标并不是一个"目标(target...)", 不像真正的目标那样会生成一个目标文件....end make[1]: Leaving directory `/path/to/test/makefile' 主 Makefile end Makefile 隐含规则 这里列一个和编译C相关的.

1.2K30

Linux 下的make命令与Makefile

或者make targetfile ,但也有时你也许只想让make重编译某些文件不是整个工程,而又有的时候你有几套编译规则,想在不同的时候使用不同的编译规则,等等,本章节就是讲述如何使用make命令的使用...下面是的取值: a: 也就是all,输出所有的调试信息。(会非常的多) b: 也就是basic,输出简单的调试信息。即输出不需要重编译的目标。...如果你只是想输出信息不想执行makefile, 你可以使用“make -qp”命令。如果你想查看执行makefile前的预设变量和规则,你可以使用“make –p –f /dev/null”。...例如:%.c 表示以.c 结尾的文件名(文件名的长度至少为3),s.%.c 则表示以s.开头,.c 结尾的文件名(文件名的长度至少为5)。...一旦规则被找到,就会执行其相当的命令,此时,我们的自动化变量的值才会生成

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

Makefile基本用法

每个target.d文件生成依赖于对应的target.c和*.h文件。当.d文件发生变化,则执行对应的make规则。 ?...当多个.d文件生成后,其中包含了各个依赖关系,使用include方法包括到文件中,如下包含了foo.d和bar.d。 其中的:.c=.d,将source中的.c替换为了对应的.d。...include的作用相当于C语言中的展开https://www.cnblogs.com/cuckoos/articles/5049984.html ? 换行说明 转义符换行,左边为输入,右边为输出。...其中第二部分的单双引号区别由bash控制不是makefile。 ? 。。。。 ? ? 。。。。 ? ? 。。。。 ?....ONESHELL .ONESHELL定义后,在构建一个目标时,方法的所有行都将被赋予shell的一次调用,不是单独调用每一行。

2.5K40

6_Makefile与GCC

gcc根据选项的规则将输入文件编译生成适当的输出文件。 ​ gcc的选项非常多,常用的选项,它们大致可以分为以下几类 。...6.2.2.2 输出选项 ​ 输出选项用于指定gcc的输出特性等,常用的选项有: ​ (1)输出目标选项(-o filename) ​ -o选项指定生成文件文件名为filename。.../a.out $ 100 ask ​ (2)输出所有警告选项(-Wall) ​ 显示所有的警告信息,不是只显示默认类型的警告。建议使用。...​ 会发现,它自动重新编译生成我们修改源文件的目标文件.c和可执行文件。 ​...这是因为Makefile中定义的执行命令的目标与工作目录下的实际文件出现名字冲突。Makefile中clean目标没有任何依赖文件,所以目标被认为是最新的不去执行规则所定义的命令。

3.5K10

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

总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。...“伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定它是否要执行。我们只有通过显示地指明这个“目标”才能让其生效。...(会非常的多) b —— 也就是basic,输出简单的调试信息。即输出不需要重编译的目标。 v —— 也就是verbose,在b选项的级别之上。...如果你确实不希望任何隐含规则推导,那么,你就不要写出“依赖规则”,不写命令。...foo.h(CC) -c (CFLAGS) (CPPFLAGS) -o @ 这个例子,就是说,文件”.c.o”依赖于文件”foo.h”,不是我们想要的这样: %.o: %.c foo.h(CC)

4.3K20

使用sed命令批量处理Makefile文件的脚本

前面写了一篇文章《Linux C/C++工程中可生成ELF、动/静态库文件的通用Makefile》,里面的Makefile代码有个不好的地方需要修改。...当编译.cpp文件时,使用的STD_OPT变量仍然是编译.c文件时的参数-std=c99,这个在C++中是不支持的。...1 sed命令的简要说明 由于sed命令可用的参数太多了,这里列举脚本中用到的几个参数: 1 2 3 sed -i:直接修改文件不是将处理的结果在屏幕上输出; sed -e:多个操作action按顺序执行.../handle_makefile.sh # (c) 2016 vfhky https://typecodes.com/linux/handlemakefilebysed.html # https://github.com...#echo "" | awk '{fflush()}' fi done 3 脚本执行结果 如上图所示,脚本不断遍历src目录下的Makefile文件,然后进行处理。

12710

Linux学习笔记(二)、常用指令(下)

输出的可执行文件名) ?...在gcc编译时使用-c参数只生成.o文件运行到编译并不链接。此外,-c放在gcc的后面和.c函数的后面都行: ? 但是最后生成可执行文件时候-o必须放在.o文件的后面 ?...4.4、变量追加+= 与Qt中.pro文件中添加属性类似,C知识点。 ? 6、Makefile模式规则 在有多个.c文件需要生成.o文件时,可以通过模式规则将所有的.c文件变为对应的.o文件。...一般的文件名都是要生成的伪文件伪目标不代表真正的目标名,在执行make命令时通过指定这个伪目标来执行器所在规则所定义的命令。...伪目标的主要作用是避免Makefile中定义的执行命令的目标和工作目录下的实际文件出现名字冲突。

2.4K21

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

总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。...下面是的取值: a —— 也就是all,输出所有的调试信息。(会非常的多) b —— 也就是basic,输出简单的调试信息。即输出不需要重编译的目标。...如果你确实不希望任何隐含规则推导,那么,你就不要写出“依赖规则”,不写命令。...(建议使用“.cc”作为C++源文件的后缀, 不是“.C”) 3、编译Pascal程序的隐含规则。...,如: .c.o: foo.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< 这个例子,就是说,文件".c.o"依赖于文件"foo.h",不是我们想要的这样

2.6K20

Linux环境基础开发工具

用户可以使用 “-S” 选项来进行查看,该选项进行编译不进行汇编,生成汇编代码,生成的后缀文件为 .s 实例: gcc –S hello.i –o hello.s 汇编(生成机器可识别代码...install -y libstdc+±static 3、gcc 选项 -E: 激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 -S: 编译到汇编语言不进行汇编和链接 -c: 编译到目标代码...-o: 文件输出文件 -D: 宏的命令行定义,多用于条件编译中的调试 -static: 此选项对生成文件采用静态链接 -g: 生成debug程序。...make程序会读取makefile文件中的数据,然后根据规则调用编译器,汇编器,链接器产生最后的输出,即 makefile文件保存了编译器和连接器的参数选项。...,我们想一想,一个文件是否需要被重新生成,是不是与其改变的时间有关?

1.8K50

Make

###二、Make的一般使用: 1、Makefile的基本构成: Makefile由规则构成,一条规则生成一个或多个目标文件,其格式如下: 目标文件列表 分隔符 依赖文件列表 [;命令] //[]中的内容可选...文件指示:包括三个部分,一个类似于c语言中的include语句,可以将另一个makefile文件包含进来;二是根据情况指定makefile中的有效部分,就像c语言中的预编译#if一样;三是定义一个多行的命令...@:执行命令时不在屏幕上输出该命令的内容。...-d:输出所有的调试信息。 -e或--environment-overrides:不允许makefile对系统环境变量进行重新赋值。...如果打印信息 不执行命令,可使用make -qp ,查看make执行前的隐含规则和预定义变量,使用make -p-f /dev/null。

1.9K100

【答疑解惑第九讲】如何在linux下面编译一个简单的c语言程序

*.i 的预处理文件,该过程激活预处理,不生成文件,所以需要重定向一个输出文件 使用指令 -E,如gcc -E main.c -o main.i 或         cpp main.c -o main.i...2.编译(ccl):生成 *.s 文件,该过程激活预处理和编译, 关联文件可以是*.i 或 *.c 使用指令 -S ,如 gcc -S main.c -o main.s 或          gcc...-S main.i -o main.s 或          ccl -S main.c -o main.s 3.汇编(as):生成 *.o 文件,该指令激活预处理、编译和汇编, 关联文件可以是 *...-c main.s -o main.o 或          as main.c -o main.o 4.连接(ld):生成可执行文件,相关联文件可以是 *.c 、*.i 、*.s 、*.o之一 gcc...C文件时,这种编译方法就显得力不从心了,这时就要用到makefile了 为了结合上面的gcc指令,我写了如下的makefile文件 1 main:main.o 2 gcc main.o -o main

1.2K110

Makefile教程

4.make的工作流程 执行Makefile时,在默认的方式下,我们输入make命令,则相当于make first_objname_in_Makefile,意思是生成出现在Makefile中第一个目标文件...“:=”表示变量的值决定于它在Makefile中的位置,不是整个Makefile展开后的最终值。...对于一般多字符变量的引用必须使用括号,否则make将把变量名的首字母作为作为变量不是整个字符串($PATH在Makefile中实际上是$(P)ATH)。...原来这种是老式的“双后缀规则”,编译器会自动将Makefile所在目录的.cpp识别为源文件后缀,.o识别为输出文件后缀。特别需要注意的是,后缀规则不允许任何依赖文件,但也不能没有命令。...) -o $@ $< 这个例子,就是说,文件”.c.o”依赖于文件”foo.h”,不是我们想要的这样: %.o: %.c foo.h $(CC) -c $(CFLAGS) $(CPPFLAGS

3.9K53

【Linux修炼】6.gccg++及Makefile【工具篇】

1.程序的翻译过程 预处理(头文件展开,去注释,宏替换,条件编译) 编译:把C变成汇编语言 汇编:把汇编变成二进制(不是可执行,二进制目标文件不能被执行) 链接:把你下的代码和C标准库中的代码合起来 2...对于动态库和静态库来说,动态库是系统自带的,即系统安装完毕就可以使用,静态库则一般需要我们自己安装,这也说明了静态库并不是直接拷贝动态库的内容。...test.c -o test的编译指令,好我们来看看如何操作: 步骤1: 创建makefile文件,并在makefile文件里编辑相应的依赖关系和依赖方法 **步骤2:**执行make指令并输出...对于上面的步骤来说,在makefile文件中:第一行代表着依赖关系,也就是mycode这个要生成文件是基于mycode.c实现的,mycode依赖于mycode.c。...3.2 Makefile语法 就此例来说,第一行仍是依赖关系,但注意下面必须是tab造成的空格,不是直接按四下空格。

49800

Linux 开发 | 学习 Makefile

---- Makefile概述 基本格式 基本上每一个 Makefile 主体就是由若干个以下规则模块组成 : 表明输出的目标,输出目标的依赖对象和生成目标需要执行的命令。...但是对于一个文件包含什么头文件,对应修改 Makefile,这样是很难维护的。 C/C++ 编译器 -MM 功能可以自动找寻文件的包含 ,生成依赖关系。...执行: $ gcc -MM mian.c 输出: main.o : main.c defs.h 因此,我们借助编译器帮我们自动生成依赖关系,并包含到 Makefile 中 -include $(DEPS...x = XXX y = $(x) x = YYY 在上例中,y的值将会是 YYY ,不是 XXX。...:= 是覆盖之前的值(类似C中的 = ) 变量的值决定于它在makefile中的位置,不是整个makefile展开后的最终值。

5.3K10

Linux — Makefile的学习笔记以及多级目录下Makefile的编写

Makefile文件文件的内容来执行大量的编译工作,Make将编译改动的代码文件不用完全编译。...o main main.o:main.c gcc -c main.c clean: rm -rf main.o main 在终端运行make –f makefile1的时候,可以看到通过两个步骤将源文件编译生成可执行文件...二、Make程序中有许多选项,其中最常用的3个选项为: 1、-k:作用是在让make命令在发现错误时仍然就执行,不是在检测到第一个错误时就停止,所以可是使用这个选项在一次操作中发下所有未编译成功的源文件...2、-n:作用是让make命令输出将要执行的操作步骤,不是真正执行这些操作 3、-f :作用是告诉make将文件名为filename的我文件作为makefile文件。...此main文件并非此工程以及Makefile需要的依赖文件,为在本人在测试阶段手动编译生成的可执行文件main,由于疏忽没有删掉。后续操作中可以忽略此文件

5.1K10

qt中qmake的详解

一般顺序是先创建.pro文件,然后由.pro文件生成Makefile文件makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模...块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出生成 的通常是可执行文件.创建程序利用内置的推理规则来激活编译器...,比较清晰还有,最好windows的路径不要有空格,中文也不要有,斜杠也推荐用/ 不是windows的\ 因为跟分行符号\相同了 /可以在unix和windows用,但是\貌似到了unix或linux...你也可以传递任务到命令行里面, 当这样做的时候,这些任务将会放到生成pro文件之后。 一般先用project模式生成.pro文件,然后再将.pro文件qmake一次生成Makefile。...,将所有的文件编译成一个与平台无关的工程文件) 可见默认生成文件名为 qt.pro 3、qmake (读取本身的Qt设置,生成与库一致的相应的Makefile) 4、make (根据生成

2.5K40
领券