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

Makefile -嵌套目录中包含src和obj文件的通用目标规则

Makefile是一种用于自动化构建和管理项目的工具,它可以根据源代码的变化自动编译、链接和生成可执行文件或库文件。Makefile通常包含了一系列规则,用于描述源代码的依赖关系和构建过程。

对于嵌套目录中包含src和obj文件的通用目标规则,可以使用以下Makefile规则:

代码语言:txt
复制
# 定义源代码目录和对象文件目录
SRC_DIR := src
OBJ_DIR := obj

# 定义编译器和编译选项
CC := gcc
CFLAGS := -Wall -Werror

# 获取源代码文件列表
SRCS := $(wildcard $(SRC_DIR)/*.c)

# 根据源代码文件生成对象文件列表
OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))

# 定义目标规则
all: myapp

# 生成可执行文件
myapp: $(OBJS)
    $(CC) $(CFLAGS) $^ -o $@

# 生成对象文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

# 清理生成的文件
clean:
    rm -rf $(OBJ_DIR)/*.o myapp

上述Makefile中,首先定义了源代码目录和对象文件目录。然后使用wildcard函数获取源代码文件列表,使用patsubst函数将源代码文件列表转换为对象文件列表。

接下来定义了目标规则all,该规则依赖于myapp目标。myapp目标依赖于对象文件列表,通过链接对象文件生成可执行文件。

最后定义了生成对象文件的规则,该规则根据源代码文件生成对应的对象文件。

可以通过运行make命令来执行Makefile,生成可执行文件myapp。运行make clean命令可以清理生成的文件。

Makefile的优势在于可以自动化构建和管理项目,提高开发效率。它可以根据源代码的变化自动进行编译和链接,只编译发生变化的文件,避免重复编译。同时,Makefile支持多目标和多规则,可以根据项目的需求进行灵活配置。

Makefile的应用场景包括但不限于:软件开发、项目构建、持续集成等。在云计算领域,Makefile可以用于构建和管理云原生应用、自动化部署和运维等方面。

腾讯云相关产品中,与Makefile相关的产品包括云原生应用平台TKE(https://cloud.tencent.com/product/tke)和云函数SCF(https://cloud.tencent.com/product/scf)。这些产品可以帮助用户快速构建和部署云原生应用,提供了丰富的工具和功能来简化开发和运维流程。

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

相关·内容

Makefile总结

Makefile是一个规定了怎么去编译链接程序脚本文件,在执行make命令时会执行该文件,window环境下IDE,如visual studio已经集成了该功能,不需要关心程序编译规则,在linux...这种情况可以使用伪目标来解决,可避免在makefile定义执行命令目标当前目录下实际文件名冲突。 一旦定义为伪目标,make执行规则不会去查找隐含规则,同样也提高了效率。...clean: $(RM) $(OBJ) $(BIN) 嵌套执行 大型项目中所有的源代码不可能放到一个目录下,一般模块化代码是分开,有生成库目录,有生成最终可执行文件目录,有进行测试目录等...通过主目录Makefile分别管理各个目录Makefile编译。这就要用到嵌套执行。...,添加文件夹,把源码都放入srclib文件夹,保持增量编译,即为Makefile通用模板 EXE = helloworld GCC = g++ SUBDIR = src lib CPP_SOURCES

95610

LinuxMakefile文件详解

clean: 清理规则,执行 make clean 时将删除生成可执行文件中间目标文件。 3. 使用 Makefile 在项目目录,执行以下命令: 构建项目: make 或 make all。...通用规则 如果有多个类似的目标文件,可以使用通用规则通用规则使用通配符 % 来匹配文件一部分。...make 使用一个名为 Makefile 文件,其中包含了一系列规则指令,描述了文件之间依赖关系以及如何生成目标文件。以下是一个简单 Makefile 文件结构基本要素: 11....文件描述了一个简单项目结构,其中源文件位于 src 目录目标文件位于 obj 目录,可执行文件位于 bin 目录。...注意到这个 Makefile 变量规则可以根据项目的结构需求进行适当调整。 23. 安装规则 Makefile 可以包含安装规则,用于将可执行文件、库文件等安装到指定位置。

85610

make menuconfig执行流程分析

GNU make找寻默认Makefile规则是在当前目录下按顺序依次找三个文件 —“GNUmakefile”、“makefileMakefile”,一旦找到就开始读取这个文件并执行。.../Makefile.build obj 在内核目录Makefile包含了$(srctree)/scripts/Kbuild.include这个文件: # We need some generic...include (srctree)/scripts/Kbuild.include这条规则把(srctree)/scripts/Kbuild.include这个文件包含到了内核根目录Makefile文件...GNU make找寻默认Makefile规则是在当前目录下按顺序依次找三个文件 —“GNUmakefile”、“makefileMakefile”,一旦找到就开始读取这个文件并执行。...include (srctree)/scripts/Kbuild.include这条规则把(srctree)/scripts/Kbuild.include这个文件包含到了内核根目录Makefile文件

3.5K10

Makefile教程

1.Makefile简介 Makefile定义了软件开发过程,项目工程编译链、链接方法规则。 由IDE自动生成或者开发者手动书写。...3.Makefile内容 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示注释。 1.显式规则。显式规则说明了,如何生成一个或多个目标文件。...下面看一个简单Makefile模板 假设源文件均为.cpp文件,那么简洁通用Makefile模板可以书写为如下格式: #指定多个源文件目录 DIR_SRC0 = ....大家也可以举一反三,给出自己Makefile模板。 7.相关知识点 7.1Makefile目标文件一定要把依赖文件包含进去吗? 不一定,可以不包含进去。...8.小结 实际上,Makefile还有很多基础知识点复杂特性并未在文中赘述,比如各种函数用法、嵌套执行make、双后缀规则、定义命令包等,这些需要我们在实际使用过程中去熟悉掌握。

4K53

make menuconfig makefile kconfig详解

*文档包含了任何用来根据kbuildMakefile 构建内核所需定义规则。...=== 2 、内核Kconfig文档作用 2.6内核源码树目录下一般都会有两个文件:KconfigMakefile。...GNU make找寻默认Makefile规则是在当前目录下按顺序依次找三个文件 —“GNUmakefile”、“makefileMakefile”,一旦找到就开始读取这个文件并执行。...规则命令部分有两种书写方式: a、目标、依赖描述命令放在同一行,目标依赖描述使用冒号(:)分隔开,在依赖文件列表后使用分号(;)把依赖文件列表命令分开。...include (srctree)/scripts/Kbuild.include这条规则把(srctree)/scripts/Kbuild.include这个文件包含到了内核根目录Makefile文件

1.8K10

Makefile 使用

Makefile 使用 我参考 Linux 内核 Makefile 编写了一个通用 Makefile,它可以用来编译应用程序: ① 支持多个目录、多层目录、多个文件; ② 支持给所有文件设置编译选项...3.1.3 通用 Makefile 解析 ① 零星知识点 A. make 命令使用: 执行 make 命令时,它会去当前目录下查找名为“Makefile文件,并根据它指示去执行操作,生成第一个目标...在 Makefile 文件确定要编译文件目录,比如: obj-y += main.o obj-y += a/ “Makefile文件总是被“Makefile.build”包含。 B....3.2 Makefile 规则 一个简单 Makefile 文件包含一系列规则”,其样式如下: 目标(target)…: 依赖(prerequiries)… 命令(command) 目标...一个 Makefile 文件可以包含规则以外其他文本,但一个简单 Makefile 文件仅仅需要包含规则。虽然真正规则比这里展示例子复杂,但格式是完全一样

4.3K42

Makefile 使用(在 Linux 中使用 make 命令来编译程序)

3.1.3 通用 Makefile 解析 ① 零星知识点 A. make 命令使用: 执行 make 命令时,它会去当前目录下查找名为“Makefile文件,并根据它指示去执行操作,生成第一个目标...在 Makefile 文件确定要编译文件目录,比如: obj-y += main.o obj-y += a/ “Makefile文件总是被“Makefile.build”包含。 B....3.2 Makefile 规则 一个简单 Makefile 文件包含一系列规则”,其样式如下: 目标(target)…: 依赖(prerequiries)… 命令(command) 目标...一个 Makefile 文件可以包含规则以外其他文本,但一个简单 Makefile 文件仅仅需要包含规则。虽然真正规则比这里展示例子复杂,但格式是完全一样。...@表示规则目标文件名; ^表示所有依赖名字,名字之间用空格隔开; <表示第一个依赖文件名。‘%’是通配符,它一个字符串任意个数字符相匹配。

8.8K10

makefile 基础、进阶及常用 makefile

命令:通过执行该命令由依赖文件生成目标 makefile 工作原理 1、若想生成目标,检查规则依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件 2、检查规则目标是否需要更新,必须先检查它所有依赖...并且增加了一个 clean 目标,他不依赖任何东西,执行一条清除所有 .o 文件 app 文件命令。用来帮助我们清理项目目录。...$@:在命令中使用,表示规则目标 $<:在命令中使用,表示规则第一个条件 $^:在命令中使用,表示规则所有条件,组成一个列表,以空格隔开,如果这个列表中有重复项则消除重复项。...o 文件列表存放到 obj 变量 obj = $(patsubst %.c, %.o, $(src)) # 方便后面更换编译器 CC = gcc # 一些通用编译参数 CFLAGS = -Wall...obj 是生成 .o 文件目录 src 是源文件目录 makefile 如下: src = $(wildcard .

35210

makefile终极奥义

如果 edit 所依赖 .o 文件也不存在,那么make会在当前文件目标为 .o 文件依赖性,如果找到则再根据那一个规则生成 .o 文件。...函数 在Makefile可以使用函数来处理变量,从而让我们命令或是规则更为灵活具有智能。...-name "*.c") 将当前目录及其子目录下所有文件后缀为 「.c」 文件以空格为限赋值给 SRC 最终版本 先总结一下前面都讲了些什么 Makefile里主要包含了五个东西:「显式规则」、「...显式规则。显式规则说明了如何生成一个或多个目标文件。这是由Makefile书写者明显指出要生成文件文件依赖文件生成命令。 隐晦规则。...各级子目录Makefile 「各级子目录Makefile」 这个是最简单,只需要obj-y+=将所有.o文件或者子级目录添加即可,例如 sub文件夹下 makefile obj-y += sub.o

1.3K30

Makefile从入门到上手

一个工程文件不计其数,并且按类型、功能、模块分别放在若干个目录makefile 定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂功能操作...目标就是指要干什么,或说运行 make 后生成什么,而依赖是告诉 make 如何去做以实现目标。在 Makefile 目标依赖是通过规则(rule)来表达。...make 会自动寻找规则里需要材料文件,执行规则下面的行为生成规则目标。...、三个自动变量模式规则 ①、三个自动变量 $@ # 在规则命令,表示规则目标。...将上述 .c 文件都放到 src 目录,.h 文件都放在 inc 目录,所生成 .o 文件产物都放在 obj 目录 使用 tree 命令查看树形结构拓扑 修改 makefile

36430

makefile从入门到放弃——博主吐血整理笔记

一个工程文件不计其数,并且按类型、功能、模块分别放在若干个目录makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂功能操作...文章目录 make简介 makefile基本结构 makefile基本使用实例 makefile变量 make使用 makefile隐含规则 makefileVPATH makefile嵌套...文件: $ make #默认生成第一个文件 $ make '目标名'#选择性编译 当工程文件makefile目标重名时,就会有伪目标。...(如上例x.c)目标名字(如上例x)相关联,那么最好写出自己生成规则,不然,隐含规则会报错。...makefile文件特殊变量VPATH就是完成这么一个功能,如果没有指明这个变量,make只会在当前目录中去寻找依赖文件目标文件

1.6K20

Linux 开发 | 学习 Makefile

---- Makefile概述 基本格式 基本上每一个 Makefile 主体就是由若干个以下规则模块组成 : 表明输出目标,输出目标的依赖对象生成目标需要执行命令。...隐式规则 Make 自己推导出来规则,比如目标为 main.o 就推出依赖条件需要 main.c对应编译命令 变量定义 类似程序宏定义, 文本替换。...)** ---- 编写规则 Make 会读取 Makefile 第一个规则第一个目标, 设置为要完成最终目标。...Makefile 嵌套 对于一个比较大工程,不同模块分类在不同目录,分别用一个 Makefile 进行管理,模块化编译,方便工程维护保证 Makefile 简洁。...Make 命令有几个参数并不往下传递,它们是“-C”,“-f”,“-h”“-o”“-W” 嵌套执行, “-w”或是“--print-directory”会在 Make 过程让你看到目前工作目录

5.4K10

用python写makefile

温馨提示:阅读本文同学最好能了解makefilepython编写规则。不懂同学可以先保存在收藏夹,以便日后查看。...2、不同.o文件或不同.cpp文件处于不同目录下。 这时我找到两种解决方法: 1、就是用VPATH这个特殊变量,但是我不可能将所有要包含目录都一一手动包含进来,于是我放弃。...OBJDIR 中间文件输出目录 # @INCROOTPATH 头文件包含路径“根路径”,方便INCPATH编写 # @LIBROOTPATH 包含“根”路径,方便LIBS编写 # @INCPATH...通过遍历之前设定工程工作目录,调用SearchFiles遍历该目录下所有的源文件(.cpp),及设定目标文件(.o)绝对路径,最终是tuple形式保存到OBJ2SRC数组;还有的是将所有源文件保存在...最终在for val in OBJ2SRC:遍历所有的数据;列出所有的源文件(.cpp)生成所对应目标文件(.o),将编译规则写进makefile。 ? 这是我要编译工程,当然截图只是其中一部分。

6.2K40

实战Makefile前,该知道那些知识?

make与make clean 生成目标文件规则(make命令): 执行make命令则会根据当前目录Makefile文件定义规则生成对应目标文件。...清空目标文件规则(make clean命令): 每个Makefile中都应该写一个清空目标文件( .o 目标文件等)规则,这不仅便于重编译,也很 利于保持文件清洁。...:增加伪目标:.PHONY:clean: .PHONY:clean clean: rm $(obj) *.o 注意: clean规则不要放在文件 开头,不然,会变成make默认目标,一般...这些变量可以让我们更加快速完成Makefile编写,其中自动变量只能在规则命令使用,常用自动变量如下: $@:规则目标 $<:规则第一个依赖文件 $^:规则所有依赖文件 CC...wildcard函数:用于查找指定目录下指定类型文件,函数参数:目录+文件类型,使用方法: SRC = $(wildcard .

47620

makefile基础工作常用点补充

定义编译规则、自动化编译、提高效率 组织文件 Makefile由一组规则(Rule)组成,每条规则格式是: 例如: 依赖关系如下图: 注意: (1) 当我们为了执行命令而非创建目标文件时,就会使用伪目标比如...PHONY" 作用是避免当前 目录文件名冲突 (可能引发隐式规则)。.../lib/libdown.so 等同 二、Makefile基本使用 make规则 没被编译过,则编译;只编译修改过文件文件被改变,只编译包含该头文件文件 常用选项 : -C dir    -...分别表示所有依赖文件目录部分和文件部分。...),gcc) # 是否相等 ifdef CC   # 变量是否定义 自动推导依赖关系 gcc –M main.c 自动生成目标文件文件依赖关系; -MM去除系统头文件依赖关系

1.4K00

6_Makefile与GCC

6.4.3.3 目标生成规则: ​ 目标生成: ​ 1)检查规则依赖文件是否存在。 ​ 2)若依赖文件不存在,则寻找是否有规则用来生成该依赖文件。...6.5.3 自动变量 ​ Makefile语法提供一些自动变量,这些变量可以让我们更加快速完成Makefile编写,其中自动变量只能在规则命令使用,常用自动变量如下: ​ 1)$@:规则目标...为什么clean下命令没有被执行?这是因为Makefile定义只执行命令目标与工作目录实际文件出现名字冲突。...而Makefileclean目标没有任何依赖文件,所以目标被认为是最新而不去执行规则所定义命令。所以rm命令不会被执行。...伪目标的两大好处: ​ 1.避免只执行命令目标工作目录实际文件出现名字冲突。 ​

3.6K10

Makefile 语法入门

注意 Makefile 文件命令必须是 Makefile 或者 makefile,并使用 make 命令编译。 二、1个规则 1. 语法规则 目标...: 依赖......如果依赖条件存在不存在依赖条件,则会寻找其它规则是否可以产生依赖条件。 例如:规则一是生成目标 hello.out 需要使用到依赖条件 hello.o,但是 hello.o 不存在。...示例 通过上面两个函数,加入我们目录下有很多个 “.c” 后缀文件,就不需要写很多条规则语句了,而是可以像下面这样写 SRC = $(wildcard *.c) OBJ = $(patsubst %...四、3个变量 Makefile 也有一些已经定义好常用变量,这里介绍其中常用3个。 1. $@ 表示规则目标,例如 hello.out。.... $< 表示规则第一个依赖条件,例如 hello.c 3. $^ 表示规则所有依赖条件,由于我们示例中都只有一个依赖条件,这种情况下 ^ < 区别不大。 4.

78830

深度刨析makefile

Src = 1.c 2.c 3.c obj:$(Src) gcc $(Src) -o obj ③ 注释 与 shell 一样,使用 # 作为注释符。...这时,就需要用到 makefile 嵌套执行,也就是在一个 makefile 文件包含另一个 makefile 文件,当 make 命令执行外层 makefile 时候会转去执行它内部包含内层...我们进入到 dir2 目录并执行 make 命令 我们看到,当执行到调用嵌套 makefile 文件语句时,会提示进入被嵌套 makefile 文件所在目录,并执行被嵌套 makefile...文件,执行完毕会提示离开被嵌套 makefile 文件所在目录,并且继续执行外层 makefile 。...),在 dir2/ 目录 makefile 嵌套了dir1/ 目录 makefile ,并且声明了一个 export 变量 Vul ,那么这个 Vul 变量将传递给被他嵌套所有其他 makefile

9010

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

此外,Makefile还可以根据源代码修改情况,自动更新目标文件,从而提高了构建效率准确性 --- Makefile基础知识 Makefile由一系列规则组成。...每个规则包括一个目标(target)、一个或多个依赖(dependencies)一组命令(commands)。目标是我们想要生成文件,依赖是生成目标所需要文件,命令是生成目标的具体步骤。...,我们定义了三个目录变量:SRCDIR表示源代码目录,OBJDIR表示编译生成目标文件目录,BINDIR表示可执行文件输出目录。...接下来,我们使用wildcard函数filter函数来获取源代码文件列表目标文件列表。然后,定义了一个BIN变量表示最终生成可执行文件名。最后,我们定义了两个规则来生成目标文件可执行文件。...第一个规则使用模式匹配来生成目标文件,它表示将源代码目录.c文件.cpp文件编译成.o文件并保存到目标文件目录。 第二个规则用来生成可执行文件

38740
领券