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

在makefile中使用带有-MMD的g ++来自动生成依赖项

好的,让我来回答这个问题。

首先,让我们回顾一下什么是 Makefile 和 g++。

Makefile 是一个构建自动化工具 Make 使用的配置文件。它包含了一系列的规则,用于告诉 Make 如何编译和链接源代码,以及如何生成可执行文件等。

g++ 是一个 C++ 编译器,用于将 C++ 代码编译成可执行文件。

现在,让我们来看一下如何使用带有 -MMD 的 g++ 来自动生成依赖项。

使用 -MMD 选项,g++ 将生成一个 Makefile 文件,其中包含编译器需要的所有依赖项。这个 Makefile 文件可以被用来构建和测试源代码,并且可以与其他源代码的 Makefile 文件共享。

具体来说,你可以使用以下命令来生成 Makefile 文件:

代码语言:txt
复制
g++ -MMD -o output_file source_file.cpp

其中,-MMD 选项告诉 g++ 生成一个 Makefile 文件,该文件包含编译器需要的所有依赖项。output_file 是生成的可执行文件的名称,source_file.cpp 是源代码文件名。

生成的 Makefile 文件将包含编译源代码所需的规则,以及由 g++ 生成的所有依赖项。你可以使用 Makefile 的规则来编译和链接源代码,并生成可执行文件。

总之,使用带有 -MMD 的 g++ 来自动生成依赖项是一种在 Makefile 中使用 g++ 的方法,它可以简化构建和测试源代码的过程,并有助于在开发过程中实现更好的可维护性和可重用性。

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

相关·内容

makefile文件编写「建议收藏」

通常我们将一些配置选项分开成一个独立makefile文件,这样有利于makefile文件管理,或将模块代码依赖关系和需要编译文件信息独自写到一个 makefile文件,最终通过include命令形成一个顶层...makefile文件完成整个工程代码编译和链接。...c和test2.c添加到C_SRCS,其代码如下所示: C_SRCS := C_SRCS += test1.c test2.c makefile中有一类特殊变量,其名称为 自动变量,自动变量值会依据规则...隐式规则用于说明 何时及如何来重新生成一类目标文件根据其名称,其描述了目标是如何依赖于名称相似的文件(一般来说除去后缀信息,其目标与依赖文件名称是一样),并调用命令创建或更新目标,比如 %.o :...6、依赖关系生成 在编写c文件代码时,我们经常通过#include 语句包含其它文件信息,比如头文件,该c文件被编译时需要依赖于其#include包含进来文件,规则编写,就需要指出这个依赖关系

2.9K10

Makefile总结

目前centos 7.3 GNUmake版本是3.82 为什么要用Makefile 在做C/C++开发过程,比如有如下文件: a.c b.c main.c 编译生成可执行二进制文件 gcc a.c...$< 依赖列表第一 通过make -p可以查看很多自定义变量,如CC(默认值为cc),RM(默认值为rm -f) 可对上述Makefile再进行修改: CC=g++ BIN=helloworld...这种情况可以使用伪目标解决,可避免makefile定义执行命令目标和当前目录下实际文件名冲突。 一旦定义为伪目标,make执行规则不会去查找隐含规则,同样也提高了效率。...在上边Makefile把clean定义为伪目标即可 .PHONY:clean 还有个特表伪目标 all ,如我们通过Makefile创建多个可执行文件时,可以使用到: 如: all: bin1 bin2...调用子目录Makefile,有时我们需要传递参数,两种方法: 方法一: 在上层Makefile使用”export”关键字对要传递变量进行声明。

96810
  • Makefile-只修改了.h头文件,编译为什么不起作用?

    不知道各位小伙伴是否碰到过这样情况: 一个 .c 文件 include 另一个 .h 头文件,使用 Makefile 构建(编译)应用程序。 第一次编译、执行,很正常!...我们来看一下 Makefile 这个规则: %.o: %.c gcc $< -c -o $@ 目标文件 main.o,只是依赖了 main.c 文件,并没有依赖 hello.h 文件。...文件依赖,这样的话,每次修改 .h 文件后,再执行 make 指令时,就可以重新编译 .o 目标文件了。.../main // 执行 NUM = 1 有没发现:多出了一个文件 main.d,该文件内容是: main.o: main.c hello.h 这个文件正是因为 Makefile -MMD 这个参数导致生成...然后 Makefile ,include 这个 .d 文件,从而让 make 知道:main.o 文件依赖于 main.c 和 hello.o 这 2 个文件。

    4.7K30

    鸿蒙源码构建工具Gn 与 Ninja 介绍及使用入门

    之前搞嵌入式一直只听说和使用makefile和make编译命令。 最近鸿蒙HarmonyOS系统火爆,对其源码编译构建产生了兴趣,了解到鸿蒙系统编译构建是基于 Gn 和 Ninja 完成。...比makefile强到哪了? 了解尝试了一番,被这速度惊到了! 为什么要使用它,总结两点就是:1.比写makefile省事,2.比make编译速度速度快不止一点点。...简单来说Gn有点儿类似于cmake或automake之类辅助生成makefile脚本东东,相当于构建脚本命令。Ninja相当于构建指令,功能类似于make命令。...换句话说, Google Chrome 项目的开发过程,开发者们认为同类型其它构建工具不给力,所以才会考虑重新开发更高效工具。...make 有3 个特性: make 只是一个通用程序,它不知道如何具体完成目标的构建工作。 make 需要 makefile 描述决定目标构建具体方案。

    2K30

    Makefile教程

    Windows环境开发人员,可能并未听说过Makefile,但是时时刻刻在使用Makefile完成程序编译,因为开发者并不需要手动编写Makefile,而是通过IDE自动生成。...也就是说,target这一个或多个目标文件依赖于prerequisites文件,其生成规则定义command。...如果target已存在,则检测target依赖是否是最新,若被修改,则重新生成target; (4)如果依赖(比如目标文件)是根据其它依赖生成,那么按照步骤3检测生成依赖。...其实可以让编译器自动推导源文件使用了哪些头文件,这样我们就可以将源文件使用头文件添加到目标obj文件依赖,读者可参考网上资料,自行给出实现。...(4)Makefile对一些简单变量引用,可以不使用”()”和”{}”标记变量名,而直接使用$x格式实现,此种用法仅限于变量名为单字符情况。另外自动化变量也使用这种格式。

    4K53

    Python如何使用GUI自动化控制键盘和鼠标实现高效办公

    参考链接: 使用Python进行鼠标和键盘自动计算机上打开程序和进行操作最直接方法就是,直接控制键盘和鼠标模仿人们想要进行行为,就像人们坐在计算机跟前自己操作一样,这种技术被称为“图形用户界面自动化...1.2.1 通过任务管理器关闭程序  windows可以使用 Ctrl+Alt+Delete键启动,并且进程中进行关闭,或者直接注销计算机阻止程序乱作为  1.2.2 暂停和自动防故障设置 ...你可以使用try和except语句来处理这种异常,也可以让程序自动发生崩溃而停止。 ...1.4.2 拖动鼠标  拖动即移动鼠标,按着一个按键不放来移动屏幕上位置,例如:可以文件夹拖动文件移动位置,或者将文件等拉入发送框内相当于复制粘贴操作 pyautogui提供了一个pyautogui.dragTo...,意为着RGB颜色值   1.5.2 分析屏幕快照  假设你 GUI 自动化程序,有一步是点击蓝色选项。

    4.1K31

    深入掌握 Makefile 与 Make 工具:高效管理自动化编译核心原理和最佳实践

    make与makefile make 是一个 Unix/Linux 系统中广泛使用构建工具,用于自动化编译和构建项目。...常用命令 make:使用默认目标(Makefile 第一个定义目标)进行构建。 make clean:调用 clean 目标,用于删除编译生成文件。....PHONY makefile ,.PHONY 用于声明「伪目标」(phony targets),即不直接对应文件目标。这些目标通常是一些执行操作命令,而非生成文件。...无依赖变化:如果所有依赖均未变化,make 将跳过编译步骤。 3. 可执行程序时间戳 重新生成:如果可执行程序源文件(或任何依赖)被修改,make 会重新编译并链接生成可执行文件。...Makefile 配置 有时 makefile 配置也会影响重新编译条件,例如使用变量、条件语句和模式规则等。 总结 需要重新编译:当源文件、依赖文件发生变化,或者手动强制重新编译时。

    35150

    makefile 基础、进阶及常用 makefile

    makefile 语法 目标:依赖 (tab)命令 如:add.o:add.c (一个tab缩进)gcc –Wall –g –c add.c –o add.o 目标:要生成目标文件 依赖:目标文件由哪些文件生成...命令:通过执行该命令由依赖文件生成目标 makefile 工作原理 1、若想生成目标,检查规则依赖条件是否存在,如不存在,则寻找是否有规则用来生成依赖文件 2、检查规则目标是否需要更新,必须先检查它所有依赖...$@:命令中使用,表示规则目标 $<:命令中使用,表示规则第一个条件 $^:命令中使用,表示规则所有条件,组成一个列表,以空格隔开,如果这个列表中有重复则消除重复。...难道要一条一条写吗?当然不会,makefile 提供了一种模式规则,使用 % 符号匹配任意字符串达到通配作用,先来看改造后代码,然后我们分析其执行流程。...,而是描述 makefile 使用,看这篇文章的人,你可以自己根据需求修改。

    40510

    Makefile 入门教程

    依赖 (Dependencies):依赖是与目标相关联文件或其他目标,它们目标生成之前必须存在或已经生成。 规则 (Rules):规则定义了如何生成目标以及生成目标所需命令。...这些函数可以 Makefile 中用于各种目的,例如文件操作、文本处理和条件判断。 5.2 自动依赖关系生成 通常,Makefile 依赖关系需要手动维护。...但是,对于 C/C++ 项目,您可以使用编译器提供 -M 选项来自动生成依赖关系。...然后使用 -include 指令包含这些 .d 文件,以自动跟踪依赖关系。 5.3 多目录项目 对于大型项目,通常需要将 Makefile 拆分成多个子目录,每个子目录都有自己 Makefile。...然后,可以使用递归或变量传递管理这些子目录之间依赖关系。

    41820

    Makefile 入门教程

    依赖 (Dependencies):依赖是与目标相关联文件或其他目标,它们目标生成之前必须存在或已经生成。•规则 (Rules):规则定义了如何生成目标以及生成目标所需命令。...这些函数可以 Makefile 中用于各种目的,例如文件操作、文本处理和条件判断。 5.2 自动依赖关系生成 通常,Makefile 依赖关系需要手动维护。...但是,对于 C/C++ 项目,您可以使用编译器提供 -M 选项来自动生成依赖关系。...然后使用 -include 指令包含这些 .d 文件,以自动跟踪依赖关系。 5.3 多目录项目 对于大型项目,通常需要将 Makefile 拆分成多个子目录,每个子目录都有自己 Makefile。...然后,可以使用递归或变量传递管理这些子目录之间依赖关系。

    25120

    【redis6.0.6】redis源码慢慢学,慢慢看 -- 第三天:MakeFile

    STD=-std=c11 -pedantic -DREDIS_STATIC='' # 使用c11标准编译,-pedantic 保证代码规范满足ISO C和ISO C++标准,所以安装时候系统要有最新...) #redis安装选项 # 依赖 REDIS_SERVER_NAME=redis-server REDIS_SENTINEL_NAME=redis-sentinel REDIS_SERVER_OBJ...) $(REDIS_CHECK_RDB_NAME) $(REDIS_CHECK_AOF_NAME) #Makefil.dep 生成 Makefile.dep: -$(REDIS_CC) -MM *....思路: 默认规则也就是第一条规则之前,通过变量设置好编译相关选项:LDFLAGS,相应对应关系REDIS_SERVER_OBJ,将规则target用变量表示好(方便all规则里面用作前置条件...第一条默认规则 all规则里面指定需要构建东西 第一规则后面先完成链接,再完成编译规则 其他功能性规则如clean和distclean 也就是从上到下结构是总-分。

    74820

    用GCC开发STM32,正点原子开发板一个库函数版本例程示例

    熟悉Makefile主要还是实践,按照李云博客介绍方法,多使用echo,或者使用make调试命令make –D > 1.txt,这样可以熟悉其中依赖关系和建立顺序。...说直白点就是建立对应依赖关系。 熟悉时候,可以一边对照实际工程编写对应Makefile。...$@:代表规则目标文件名:可以使用@-->at 代表目标的意思    $%:规则目标文件是一个静态库文件时,代表静态库一个成员名.    $<:规则第一个依赖文件名.   ...-MMD    和-MM相当,忽略#include造成依赖关系    -l(library)    用于指定编译时候使用库. gcc-lgtk test.c 则程序使用gtk库进    行编译.不过需要注意是...gcc库一般以lib(name).a命名库文件,使用    -l参数导入库文件时候,直接使用-lname引入,lib被省略.

    1.5K20

    Makefile学习1

    但是当我们修改程序后,再次使用make编译,make只编译你新添加或修改了源文件。 make是根据时间戳判断一个规则目标依赖文件是否有更新。...自动生成头文件依赖关系 更高效解决方法是:使用gcc -M 命令自动生成头文件依赖关系 通过gcc -M命令,我们就可以自动生成一个hello.o目标文件依赖关系,就不需要我们手动将头文件添加到规则中了...应用: 立即展开变量一般用在规则目标、目标依赖。make解析Makefile阶段,需要这些变量有确切构建依赖关系树。...当一个追加变量定义时使用了override,后续对它值进行追加时,也需要使用带有override指示符追加方式。否则对此变量值追加不会有效。...override修饰: # make CFLAGS = -Wall # make CFLAGS=-g CFLAGS = -g Makefile递归执行 实际工程项目中,各个源文件通常存放在各个不同目录

    38510

    换个角度说Makefile

    作为一个轻度使用者,应读者要求,斗胆介绍一下makefile,不过与普通makfile教程不同是,本文准备从另外一个角度介绍。如有不妥之处,欢迎指出。...使用基本流程,生成目标,清除目标。...然后再去学习如何编写makefile。 实际上它主要做事情也很清楚,那就是编译和链接。这个《helo程序是如何编程可执行文件已经有所介绍,还不了解朋友可以简单了解一下。...makefile是什么东西 它是一个规则文件,里面按照某种语法写好了,然后使用make解释执行,就像shell脚本要用bash解释运行一样。通常会用makefile构建C/C++项目。...构建C/C++项目的makefile做了什么 makefile主要做下面的事情(以C程序为例) 用变量保存各种设置,例如编译选项,编译器,宏,包含头文件等 把.c编译成.o 把.o与库进行链接 清除生成文件

    75620

    【Linux】项目自动化构建工具-makeMakefile 详解

    前言   Linux及类Unix系统自动化构建项目是提高开发效率、减少重复劳动关键环节。make工具及其配置文件Makefile是实现这一目标的重要工具组合。...和rm -f hello 就是生成目标需要执行Shell命令 然后我们就可以使用make创建可执行程序hello: 在这个例子,hello是最终目标,它依赖于hello.c。...为了生成hello,需要执行gcc -o hello hello.c命令,如上图绿色划线部分,这样我们直接使用make命令,它就可以帮我们Makefile文件中找到生成hello命令,自动执行。...Makefile高级特性 变量:Makefile可以使用变量存储文件名、编译器选项等,以提高灵活性和可维护性。...代替gcc和-Wall -g使用时需要使用括号并在前面加上$ 自动变量:规则命令里,可以使用一些特殊变量表示依赖文件和目标文件等,如: $@:表示依赖关系目标文件(冒号左侧)。

    23010

    样本数量线性时间计算复杂度GAN

    我们通过实验证明,我们提出方法各种无监督图像生成基准测试优于 WGAN 和 MMD-GAN 变体。...GAN由生成器网络 gθ 和评论网络 fφ(也称为鉴别器)组成。生成gθ:Z → X 将从简单分布(例如,高斯分布)采样潜在向量 z ∈ Z 转换为数据空间中向量 ˆx。...生成矩匹配网络(GMMN)[23]使用自动编码器将数据首先转换为潜在空间,然后训练生成网络以生成与真实潜在分布匹配潜在向量。...图像生成 最近大规模GAN分析[26]表明,当给定充足计算预算时,不同模型性能上达到相似的最佳表现,并倡导实际设置下比较分布。...网络和超参数详情 鉴于我们计算预算和实验设置,我们对所有模型使用了类似于[21]DCGAN风格生成gθ和评论家fφ架构。

    11810

    Linux工具入门:make工具与Makefile文件

    make工具通过一个称为Makefile文件完成并自动维护编译工作,Makefile文件描述了整个工程编译、连接规则。 2. Makefile文件 Makefile描述了整个工程编译连接规则。...如果此时再次输入make,会看到: $ make make: 'main' is up to date. make编译规则是根据时间进行判断,一旦依赖列表某个文件更新时间比目标文件晚,则会重新生成目标...也可以生成指定目标: $ make add.o 【指定只生成add.o文件】 Makefile文件名字不一定得命名为“Makefile”或"makefile",使用其他名字也是可以。...Makefile 自动化变量 从上面的Makefile文件我们发现一些问题:有时候目标文件依赖列表过长,或者命令重复书写。利用Makefile自动化变量可以解决这个问题。....c文件到.o文件生成使用同一条命令完成,简化重复工作。

    3.4K40

    Linux工具入门:make工具与Makefile文件

    make工具通过一个称为Makefile文件完成并自动维护编译工作,Makefile文件描述了整个工程编译、连接规则。 回到顶部 2....如果此时再次输入make,会看到: $ make make: 'main' is up to date. make编译规则是根据时间进行判断,一旦依赖列表某个文件更新时间比目标文件晚,则会重新生成目标...也可以生成指定目标: $ make add.o 【指定只生成add.o文件】 Makefile文件名字不一定得命名为“Makefile”或"makefile",使用其他名字也是可以。...Makefile 自动化变量 从上面的Makefile文件我们发现一些问题:有时候目标文件依赖列表过长,或者命令重复书写。利用Makefile自动化变量可以解决这个问题。....c文件到.o文件生成使用同一条命令完成,简化重复工作。

    3.1K40

    Linux下使用VSCode配置C++调试环境

    一个大项目源码,往往包含一堆源代码、头文件、配置文件、脚本文件,它们往往又都是通过 Makefile 文件进行组织维护。...虽然 Makefile 有写明编译目标和其对应依赖,但对于大项目来说,错综复杂依赖关系即使去认真阅读 Makefile 文件也不是那么容易理清,更何况大项目的 Makefile 文件往往为了书写方便进行了大量封装...安装完后,需要进一步进行配置才能使用: 首先用 VSCode 打开你要调试项目目录,然后可以看到左侧栏出现一个调试按键,点击一下会弹出如下提示: 图片 这是告诉你目前没有任何配置文件供编译调试,...一般来说有 Makefile 文件可以直接 make 编译,没有 Makefile 文件可以找找是否有 CMakeLists 文件或者 Configure 脚本,然后使用它们生成 Makefile...不过编译时需要注意是,确保 Makefile 文件 CFLAGS 和 CXXFLAGS 变量包含 -g 参数,如果没有则加上,-g 参数是为了保证编译出来二进制文件包含调试信息(也即俗称 Debug

    7.7K31
    领券