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

为什么调用make "target“会导致额外的命令,而不是调用"target.o”

调用make "target"会导致额外的命令,而不是调用"target.o"的原因是因为在Makefile中,"target"通常是一个规则(rule)的名称,而不是一个文件的名称。Makefile是一个用于构建和管理软件项目的文件,其中包含了一系列规则,每个规则定义了一组依赖关系和相应的命令。

当我们运行make命令并指定目标为"target"时,make工具会查找Makefile中名为"target"的规则,并执行该规则中定义的命令。这些命令通常用于生成目标文件(如"target.o")或执行其他必要的操作。

在规则中,我们可以定义目标文件的依赖关系,例如"target"依赖于"target.o"文件。当我们运行make命令时,make工具会检查目标文件和其依赖文件的时间戳,如果目标文件不存在或其依赖文件的时间戳较新,make工具将执行规则中定义的命令来生成目标文件。

因此,调用make "target"会导致额外的命令,而不是直接调用"target.o",是因为make工具需要根据规则中定义的命令来生成目标文件。这样可以确保在构建过程中,所有必要的操作都能被正确执行,以生成最终的目标文件或完成其他任务。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云容器服务(Tencent Kubernetes Engine,TKE):提供高度可扩展的容器化应用管理平台,支持快速部署、弹性伸缩和自动化运维。了解更多:腾讯云容器服务
  • 腾讯云云服务器(CVM):提供安全、高性能、可弹性伸缩的云服务器实例,适用于各种计算场景。了解更多:腾讯云云服务器
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的对象存储服务,适用于存储和处理各种非结构化数据。了解更多:腾讯云对象存储
  • 腾讯云人工智能(AI):提供丰富的人工智能服务和解决方案,包括图像识别、语音识别、自然语言处理等。了解更多:腾讯云人工智能
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等,帮助实现智能化的物联网应用。了解更多:腾讯云物联网
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile基本用法

无空格换行等价 单行长度过长不易于阅读,转义符本身导致替换后空格产生。 可以使用符号配合转义符,由于转义后与空格,不存在,被替换为空,则形成第三行。 ? ? ?...管道命令 对要调用规则施加特定顺序,不必强制更新目标,使用管道命令。 当执行此条规则,则首先需要执行先决条件规则。然而当先决条件存在,不论是否被更改,都属于满足条件。...依赖关系生成格式为:target.o : target.c *.h 在这里将依赖关系写入了每个.d文件名对应 文件, 值是当前进程号,每两个 sed替换命令中,使用逗号作为分隔符,s,g作为开头和结尾...替换内容为: target.o : target.c *.h替换为:target.o target.d : target.c *.h。....ONESHELL .ONESHELL定义后,在构建一个目标时,方法所有行都将被赋予shell一次调用不是单独调用每一行。

2.5K40

日常记录(6)Verilog

之后@表示不显示执行该条命令(当执行make时,所有执行实际命令会在屏幕中进行打印)。 CC为编译器,使用=表示延迟生效变量,使用:=表示立即生效变量。...set -e,这句语句告诉bash如果任何语句执行结果不是true则应该退出,不是继续向下执行。rm -rf $@表示删除生成目标文件。...include表示引入外部文件,原理上类似于C语言中.c文件。这里将所有的.d文件规则进行展开。写到这里不是开头原因在于,开头写规则为默认规则,写到开头覆盖默认规则。...替换内容为:target.o : target.c *.h替换为:target.o target.d : target.c *.h。...每个target.d文件生成依赖于对应target.c和*.h文件。当.d文件发生变化,则执行对应make规则。即.d文件表达了替换名。

49730

它是如何工作?

用这个方便工具来更有效运行和编译你程序 makefile是用于自动编译和链接,一个工程有很多文件组成,每一个文件改变都会导致工程重新链接—–但是不是所有的文件都需要重新编译,makefile...这就是为什么很多 Makefile 包括 all 这个目标,这样可以调用多个目标。...PHONY 用来定义这些不是文件目标。make 默认调用这些伪目标下步骤,不去检查文件名是否存在或最后修改日期。...让我们验证一下: CC = gcc CC = ${CC} all: @echo ${CC} 此时运行 make 导致: $ make Makefile:8: *** Recursive variable...但宗旨就是:让编译器知道要编译一个文件需要依赖其他哪些文件。当那些依赖文件有了改变,编译器自动发现最终生成文件已经过时,重新编译相应模块。

3.3K31

xmake v2.3.1 发布, 无缝对接其他构建系统

$ xmake project -k ninja 然后调用ninja来构建: $ ninja 或者直接使用xmake命令调用ninja构建,见下文。...|msbuild| ..] $ xmake 另外,配置了--trybuild=参数手动指定了默认构建系统,后续build过程就不会额外提示用户选择了。...即使跑通了一个工具链交叉编译,如果切到另外一个工具链环境,可能又要折腾好久,如果使用xmake,通常只需要两条简单命令即可: !...是不是很简单?如果你觉得这没啥,那么可以对比下直接操作....传递用户配置参数 我们可以通过--tryconfigs=来传递用户额外配置参数到对应第三方构建系统,比如:autotools传递给./configure,cmake传递给cmake命令

85730

CMake基础

/a.out 之后执行该命令,操作系统读取刚刚生成可执行文件,从而执行其中编译成机器码,调用系统提供printf函数,并在终端显示出Hello, world 二、多文件编译与链接 单文件编译虽然方便...得到最终a.out: g++ hello.o main.o -o a.out 三、构建系统Makefile 文件越来越多时,一个个调用g++编译链接变得很麻烦 于是,发明了 make 这个程序,你只需写出不同文件之间依赖关系...,并开始构建 a.out: make -C build 以下命令和上一个等价,但更跨平台: cmake --build build 执行生成 a.out: build/a.out 2.为什么需要库...: 其中静态库相当于直接把代码插入到生成可执行文件中,导致体积变大,同样对库文件进行编译,但生成可执行文件,不依赖库文件即可运行 动态库则只在生成可执行文件中生成“插桩”函数(汇编语言中jump...(fmt REQUIRED) target_link_libraries(myexec PUBLIC fmt::fmt) 为什么是 fmt::fmt 不是简单 fmt?

1.9K20

CC++ 构建系统,我用 xmake

为什么要做 XMake 每当在 Reddit 社区跟别人讨论起 XMake,大家总是拿下面这张图来吐槽。 ?...XMake 特性和优势 经常有人问我 XMake 有什么特别之处,相比现有 CMake、Meson 此类构建工具有什么优势,我为什么要使用 XMake 不是 CMake?...XMake 都可以帮他们提升开发效率,让其更加关注 C/C++ 项目本身,不是花更多时间在构建工具和开发环境上。 下面,我来具体介绍 XMake 这些主要特性。...基础语法 不过,还是有人吐槽:那不是还得学习 Lua 么?... XMake 不仅仅拥有和 Ninja 近乎相同构建速度,而且不需要额外再生成其他构建文件,直接内置构建系统,任何情况下,只需要一个 xmake 命令就可以实现极速编译。

2K20

Tina_Linux_OTA_开发指南

或手工调用make -j16 TARGET_CONFIG=....不是节省ram 和rom 占用。 设备端在进行差分升级时,需要使用版本匹配旧版本镜像,加上差分包,生成新版本镜像。 rsync 不支持原地更新,必须有额外空间保存新生成镜像。...如果此过程中断,则defconfig 未被还原,导致下次正常编译出问题。 解决方式: 还原方案目录下defconfig 文件。...目前系统组成定义为包含kernel 和rootfs 分区。考虑不同方案,分区名可能不同,因此支持用环境变量指定具体 分区名,不是hardcode为某个分区名。...或者说升级有风险,中途掉电导致无法启动。boot0/uboot 升级具体可参考本文档中ota-burnboot 部分。

4.2K30

深入理解Android Build系统

其具体执行是建立shell命令以及调用add_lunch_combo命令,这个命令调用命令所传递参数存放到一个全局数组变量LUNCH_MENU_CHOICES中。...Make 文件 整个 Build 系统入口文件是源码树根目录下名称为“Makefile”文件,当在源代码根目录上调用 make 命令时,make 命令首先将读取该文件。...编译镜像 ### make /make droid 如果在源码树根目录直接调用make命令不指定任何目标,则会选择默认目标:“droid”(在 main.mk 中定义)。...这个过程并不是在 droid 一个目标中定义,而是 droid 目标会依赖许多其他目标,这些目标的互相配合导致了整个系统编译。 那么需要编译出系统镜像,需要哪些依赖呢? !...注: 在 Android Build 系统中,编译是以模块(不是文件)作为单位,每个模块都有一个唯一名称,一个模块依赖对象只能是另外一个模块,不能是其他类型对象。

1.8K60

Makefile教程

“:=”表示变量值决定于它在Makefile中位置,不是整个Makefile展开后最终值。...解释:当生成target目标对象时,执行$(MAKE) -C $(SUBDIR)这条命令,进入目录OBJDIR,该目录下有一个Makefile,并执行。...对于一般多字符变量引用必须使用括号,否则make将把变量名首字母作为作为变量不是整个字符串($PATH在Makefile中实际上是$(P)ATH)。...伪Target是用来显示请求执行命令名称。 为什么使用PHONY来指明命令名称: (1)避免和同名文件冲突。...原来这种是老式“双后缀规则”,编译器自动将Makefile所在目录.cpp识别为源文件后缀,.o识别为输出文件后缀。特别需要注意是,后缀规则不允许任何依赖文件,但也不能没有命令

3.9K53

真香,我用Makefile做Flutter项目的自动化管理

它们可以设置 precedent target,也就是说我们可以将这些关联命令在一起,如build_stg只会在run_unit_tests成功后调用,run_unit_tests将在lint`成功后调用...现在我们可以在终端通过make调用不同target了: 但是,Makefile默认情况下是用来_创建新文件_。...我们可以安全地运行make clean并make format来看看是不是达到了效果。 关联规则 既然我们知道如何创建新命令,我们如何关联命令?...它另一个好处是可以通用——这意味着我们可以将它从一个项目带到另一个项目,并将其作为我们应用程序开发主要工具集。 需要注意是,我们在每个target内使用制表符不是空格是非常重要。...如果我们添加空格不是制表符,我们将收到以下错误消息: Makefile:34 *** missing separator. Stop. 最后祝大家工作愉快,不用加班 加个关注呗

74420

Make 快速入门

recipe: 中文翻译为菜谱,它是 make 用于生成 target 文件或完成 target 任务执行一系列 shell 命令。这些命令可以放在同一行里,也可以每个命令占一行。...值得注意是,recipe 默认以制表符开头,不是空格。 2.2 运行 make 在当前目录下创建一个 Makefile 文件, 命名为 Makefile 。...指定 target 列表不是文件名。...在 Makefile 所在目录运行不带参数 make 命令make 启动 Makefile 文件中第一个 target ,本例是 help , make 将 Makefile 中第一个出现 target...函数 make函数用于处理 Makefile 文件中文本,例如:计算操作文件列表,“菜谱”中使用命令等。 4.1 函数调用 函数调用类似于变量引用,它可以出现在任何变量引用可以出现地方。

1.5K10

可移植 Makefile 教程

许多常见 make 扩展名 -- 尤其是条件判断 -- 导致不够健壮却又复杂 Makefile, 因此最好避免这些情况。能够确信你构建系统能够各司其职,正常工作是非常重要。...dependency tree 在上面的图示中,“.c” 结尾文件是事先写好源文件,不是命令生成文件,所以它们没有先决条件。...在一个规则中,命令随即跟在目标或先决条件那一行后面。每个命令行必须以一个 tab 字符开头。如果你编辑器不能进行相关配置的话,可能非常麻烦。...input.o 这会导致依赖树产生连锁效应,也就是说,一个目标的重建可能导致它所涉及更早期目标的重新构建,直到所有涉及目标都是最新状态。...举个例子,下面是在源文件之外构建,它一个调用 gcc 依赖生成器例子,不是虚构 input.c : $ gcc $CFLAGS -MM -MT '$(BUILD)/input.o' input.c

1.3K10

Spring -- Cache原理

简介 Spring Cache并不是一种缓存实现方式,而是缓存使用一种方式,其基于Annotation形式提供缓存存取,过期失效等各种能力,这样设计理由大概是缓存和业务逻辑本身是没有关系,不需要耦合到一起...,如下图所示,该配置自动选择缓存实现,然后在实例化前调用对应CacheManagerCustomizer执行用户业务逻辑。...不是很理解,为什么Spring没有对此开放接口,业务中所有缓存不可能都使用同一套策略。...,代码中都已经标识好了注释,其中值得关注是Cacheable,CachePut操作区别,Cacheable优先去缓存里面获取,缓存获取到了,且当前没有对应CachePut操作,则不会再次调用方法...这里推荐使用自定义方案,否则每次都要额外创建EL上下文,然后解析,虽然是轻量操作,但该操作很频繁。

3.1K30

如何使用Makefile在Ubuntu上自动执行重复任务

它建议您使用Makefile,因为GNUmakefile是针对GNU特定命令makefile并不突出。 Makefile是特定于目录,这意味着make将在调用目录中搜索以查找这些文件。...调用make时,我们可以通过输入以下内容来指定targetmake target_name 然后,Make将检查Makefile并执行与该target关联命令。...您可以根据需要添加任意数量缩进行和命令Make一次一个地浏览它们。 在命令告诉make以不同方式处理它们之前,我们可以放置一些东西: -:命令破折号告诉make如果遇到错误则不中止。...这基本上采取以下形式: original_extension.target_extension: 这不是一个实际目标,但它将匹配任何具有第二个扩展名文件调用,并在第一个扩展名中将它们构建出文件。...虽然我们这样做,但我们应该尝试处理常见.jpg文件轻微变化。这些图像文件通常使用.jpeg扩展名不是.jpg。

2.3K00

CMake使用总结

大意就是,GLOB收集源文件增加或删除,CMakeLists.txt没有发生修改时,CMake不能识别这些文件。...B.a C.so) 需要注意是,target_link_libraries里库文件顺序符合gcc链接顺序规则,即被依赖库放在依赖它后面,比如上面的命令里,libA.so可能依赖于libB.a...使用绝对路径好处在于,当依赖库被更新时,make时候也重新链接。.../hello/a.txt) 自定义目标还可以使用add_dependencies命令加入到其他目标的依赖列表里,当执行make demo时,whatever目标会被自动调用。...更多例子 自定义Makefile目标的完整例子 下面的CMakeLists.txt添加一个自定义目标proto,该目标在编译工程前,调用protobuf程序编译先生成Google Protocol

1.7K10

抛弃 Autotools 向 CMake 迈进吧

大写 VERSION 字符串不是任意,也不只是格式。它们是 project 命令有效参数。 在继续之前,先写一个简单 C 或者 C++ hello world 程序。...换句话说,你任何文件都会被复制到编译目录(在你运行 cmake 命令后,这个过程更加清晰,到时候回过头来看一下)。...DIRECTORY 参数指定了数据文件是一个目录,不是一个文件(FILE)或者脚本(SCRIPT)。你使用参数和复制一些额外文件到编译目录时是一样。...Linking C executable Hello [100%] Built target Hello 或者你可以运行 make 命令。...为了调用这个交互式 CMake,使用 ccmake 命令,在这个简单项目里没有太多东西。但是对于像 Rosegarden 这样大型项目,这将非常有用。

40820

cmake 学习笔记(一)

==>先生成一个静态库,链接该库 例子四 ==>将源文件放置到不同目录 例子五 ==>控制生成程序和库所在目录 例子六 ==>使用动态库不是静态库 例子一 一个经典C程序,如何用cmake...方式来构建(即生成中间产物与源代码分离),并始终坚持这种方法,这也就是此处为什么单独创建一个目录,然后在该目录下执行 cmake 原因 cmake .....注意:CMakeList.txt 文件中,命令名字是不区分大小写参数和变量是大小写相关。 cmake命令 cmake 命令后跟一个路径(..)...要显示执行构建过程中详细信息(比如为了得到更详细出错信息),可以在CMakeList.txt内加入: SET( CMAKE_VERBOSE_MAKEFILE on ) 或者执行make时 $ make...还不是我们最想要

51610
领券