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

为什么不让Make为隐式规则定义一个LD变量?

在云计算领域,Make是一个常用的构建工具,用于自动化构建和管理软件项目。Make使用Makefile文件来定义构建规则,其中可以定义显式规则和隐式规则。

隐式规则是一种根据文件名的模式匹配来自动推导生成目标文件的规则。在Makefile中,可以通过定义隐式规则来告诉Make如何根据源文件生成目标文件。隐式规则通常用于处理一类文件的编译、链接等操作。

LD变量是Makefile中的一个预定义变量,用于指定链接器的命令和选项。通过设置LD变量,可以自定义链接器的行为。

然而,将Make定义一个LD变量作为隐式规则是不合适的,原因如下:

  1. 隐式规则是根据文件名的模式匹配来自动推导生成目标文件的规则,而LD变量是用于指定链接器的命令和选项。这两者的功能和作用不同,不应混淆使用。
  2. Make的隐式规则已经提供了默认的链接器规则,可以根据目标文件的类型自动选择合适的链接器命令和选项。如果定义一个LD变量作为隐式规则,可能会导致混乱和冲突。
  3. Make的隐式规则是一种约定俗成的规范,广泛应用于软件项目的构建过程中。如果定义一个LD变量作为隐式规则,可能会引起团队成员的困惑和不一致性。

综上所述,不建议将Make定义一个LD变量作为隐式规则。相反,应该遵循Make的约定和规范,使用隐式规则来自动推导生成目标文件的规则,使用LD变量来自定义链接器的命令和选项。

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

相关·内容

makefile文件编写「建议收藏」

2、变量定义: 语法:变量名 := 变量值 在makefile中,经常先定义一个变量,然后往该变量中追加新的值(通过+=符号),比如先定义一个C_SRCS变量(该值可以为空),然后将代码文件test1....在makefile文件规则有2种,一种是显规则,另一种是规则。...规则用于说明 何时及如何来重新生成一类目标文件根据其名称,其描述了目标是如何依赖于名称相似的文件(一般来说除去后缀信息,其目标与依赖文件的名称是一样的),并调用命令来创建或更新目标,比如 %.o :...%.c (CC) -c (CFLAGS) < -o 这个规则说明了.o的目标文件依赖于同名的.c文件,其中< 及 <一个prerequisites条件,也就是 目标名称.c,...在makefile中,我们通常要编写3种规则,第1种代码链接规则,第2种源代码编译规则,第3种汇编代码编译规则

2.2K10

快速上手和使用makefile

make一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。...一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为...bbs用的是外部时钟25M while (1) { } } 链接脚本文件stm32f103VET6.ld定义代码段和内存变量等的存储位置。...更近一步,可以把这些命令写入文件,命令makefile,直接make一下就可自动完成编译链接和生成执行文件。...因此可以利用makefile的自动推导和规则进一步精简。

1.4K20

makefile终极奥义

如果 edit 所依赖的 .o 文件也不存在,那么make会在当前文件中找目标 .o 文件的依赖性,如果找到则再根据那一个规则生成 .o 文件。...上述还只是简单的makefile,属于「显规则」,那么为了优化makefile我们介绍「规则」 makefile中使用变量 在Makefile中我们要定义一系列的变量变量一般都是字符串,这个有点...(如:ld ) 隐晦规则 如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符。 通配符 符号 含义 % 任意一个 ?...-name "*.c") 将当前目录及其子目录下所有文件后缀 「.c」 的文件以空格限赋值给 SRC 最终版本 先总结一下前面都讲了些什么 Makefile里主要包含了五个东西:「显规则」、「...显规则。显规则说明了如何生成一个或多个目标文件。这是由Makefile的书写者明显指出要生成的文件、文件的依赖文件和生成的命令。 隐晦规则

1.3K30

万字整理 | 深入理解编译系统

下面我们以使用最普遍的组建系统make例简单地讲一讲。make命令会在同目录下寻找文件Makefile,然后解析并执行它。...Makefile的内容包含5个部分,1.变量定义,2.显示规则,3.规则,4.文件指示,5注释。变量定义相当于C语言中的宏,使用时会被替换到相应的位置。...显示规则说明了如何生成一个文件,显示规则包含3部分,目标、依赖和命令。由于很多规则模式是很常用的,所以make内置了一些规则,我们没必要把规则写全,make会自动推导。...显示规则的格式如下,规则没有命令部分。 三、编译原理简介 前面我们讲了一下最狭义编译,也就是编译原理中的编译。...这颗树的根节点就是编译单元,编译单元的子节点有两类,分别是声明和定义,声明包括变量声明和函数声明,定义包括变量定义和函数定义

64410

【Linux】《how linux work》第十五章 开发工具

标准库目录/lib和/usr/lib是的,这意味着您不需要将它们包含在/etc/ld.so.conf中。...所有共享库问题的头号原因是一个名为LD_LIBRARY_PATH的环境变量。 将此变量设置以冒号分隔的目录名称集合,使得ld.so在查找共享库时首先搜索给定的目录。...为了构建一个目标,make遵循一个规则,比如从一个.c源文件到一个.o目标文件的规则make已经知道了几个规则,但你可以自定义这些现有规则并创建自己的规则。...下一行只是一个定义;它将OBJS变量设置两个对象文件的文件名。这在后面会很重要。现在,请注意如何定义宏以及如何在后面引用它($(OBJS))。...在没有Makefile的情况下运行make实际上在处理Fortran、Lex或Yacc等情况时最有用,因为你可能不知道编译器或实用程序的工作原理。 为什么不让make试着你找出来呢?

7410

Linux从入门到入土③(GCC、静态与动态链接库、Git、Make、Makefile)

变量使用 Makefile 进行规则定义的时候,为了写起来更加灵活,我们可以在里边使用变量。...makefile 中的变量分为三种:自定义变量定义变量自动变量定义变量用 Makefile 进行规则定义的时候,用户可以定义自己的变量,称为用户自定义变量。...这些预定义变量的名字一般都是大写的,经常采用的预定义变量如下表所示:图片# 这是一个规则,普通写法calc:add.o div.o main.o mult.o sub.o gcc...add.o div.o main.o mult.o sub.o -o calc # 这是一个规则,里边使用了自定义变量和预定义变量obj=add.o div.o main.o...Makefile 中的变量除了用户自定义变量和预定义变量外,还有一类自动变量

1.5K10

Makefile基本用法

使用变量简化 添加objects变量后,形成以下简化形式。内容不变。 ? 使用默认编译简化 无需详细说明编译单个C源文件的方法,因为make可以解决这些问题。如main.o,kdb.o等。...force给出一行空依赖显声明,防止force作为%的一员,被自身依赖自身的构建。...当一个先决条件的名称的格式'-lname'时,make通过搜索文件来专门处理它libname.so文件 如果找不到,则在当前目录中的libname.a文件中 在通过匹配vpath搜索路径和vpath搜索路径指定的目录中....ONESHELL .ONESHELL定义后,在构建一个目标时,方法的所有行都将被赋予shell的一次调用,而不是单独调用每一行。...变量导出 使用export进行导出,供子makefile使用。只写export不带参数则导出所有变量。 unexport禁止导出。 ? 变量定义与清除 如下定义,功能上基本等价。

2.5K40

C++避坑指南

目录 1 函数声明和对象定义 2 静态对象初始化顺序 3 类型转换 3.1 转换 3.2 显示转换 4 inline内联 5 名称查找 5.1 受限名称查找 5.2 非受限名称查找 6 智能指针 6.1...对于作用域多个编译单元的静态对象,不能保证其初始化次序。如下代码中,在x.cpp和y.cpp分别定义变量x和y,并且双方互相依赖。...3.1 转换 C++自定义类型在以下两种情况会发生转换: 1) 类构造函数只有一个参数或除第一个参数外其他参数有默认值; 2) 类实现了operator type()函数;...operator int()函数可以将Integer类型转换为int。从下面代码和输出中可以看出确实发生了的类型转换。...) { Person::~Person(); throw; }} 表面上构造函数定义空且是inline,但编译器实际会生成如右侧的伪代码来构造基类成分和成员变量

1.5K30

作用域是什么?

最近的文章被尧尧吐槽有些水,因为我家的两个猫不让我敲键盘。这个理由能勉强接受吗? ? 为什么会有作用域? 程序需要一套规则来存储变量,并且之后可以方便的找到这些变量。这套规则就称为作用域。...1.2 理解作用域 ---- 相关内容: 引擎 从头到尾负责js程序的编译和执行过程 编译器 负责语法分析及代码生成等工作 作用域 负责收集并维护所有生命的标识符组成的一系列查询,并实施一套严格的规则...,确定当前执行的代码对这些标识符的访问权限 1.3 作用域嵌套 ---- 当一个块或者函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。...1.4 作用域嵌套 ---- 当一个块或者函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。...不成功的LHS引用会导致自动创建一个全局变量(非严格模式下),或者抛出ReferenceError异常(严格模式下)。 愿我们有能力不向生活缴械投降---Lin

1.3K20

Python闭包(Python Closures)介绍

def outer_function(x): # 在外部函数中定义一个变量 outer_variable = x # 在外部函数中定义一个内部函数 def inner_function...Why:python闭包和自由变量的原理解释,为什么要有闭包 开始对闭包介绍的时候,有这么一段话: Python不要求声明变量,而是假定在函数定义体中赋值的变量是局部变量。...这就是闭包的作用,通过返回一个内部函数的方式,保留了对自由变量的绑定,解决了自由变量访问的问题, 并没有使用global关键字,但是可以访问到了外部函数make_averager定义的局部变量。...对于数字、字符串、元组等不可变类型以及None来说,赋值会创建局部变量。 可变对象添加元素不是赋值,不会创建局部变量。 4....对于不可变类型和None来说,赋值会创建局部变量,把自由变量转换为局部变量, 这可能会导致程序报错:局部变量在赋值前进行了引用。

34830

22this关键字

为什么使用this this提供了一种更优雅的方式来“传递”一个对象引用,因此可以将API设计得更加简洁井且易于复用。...绑定 绑定的规则需要考虑的是调用位置是否有上下文对象,或者说是否被某个对象拥有或者包含。当然,这种说法井不准确。...丢失 丢失是最常见的this绑定问题,指的就是被绑定的函数会丢失绑定对象,也就是说它会应用默认绑定,从而把this绑定到全局对象。...: 200, f: fn, //对象的f()方法指向fn()函数 }; // 定义一个全局变量,并被赋值对象obj的f()方法 var fun = obj.f; // 将fun作为一个函数进行调用...: 200, f: fn, //对象的f()方法指向fn()函数 }; // 定义一个全局变量,并被赋值对象obj的f()方法 var fun = obj.f; // 将fun作为一个函数进行调用

31240

Makefile学习1

Makefile内容 简单的概括一下Makefile 中的内容,它主要包含有五个部分,分别是: 1) 显规则规则说明了,如何生成一个或多的的目标文件。...PI值3.1415,再次使用make编译程序,make并没有重新编译,因为module.h并没有添加到Makefile的规则依赖目标中,所以无论你怎么修改module.h,都不会重新编译helloworld.c...对于规则中的每一个命令,make会开一个进程执行,每条命令执行完,make会监测每个命令的返回码。...中定义一个变量val,使用使用 (val) 或 {val} 的形式去引用它。...export命令,就相当于将对应变量声明为系统环境变量 Override指示符 override的作用及使用: 在一个Makefile中使用define、:=、= 定义变量,我们可以在执行make命令时重新指定这个变量的值

32710

重温 CC++ 笔记

= delete 表示明确禁用某个函数(非构造、析构也可以用),让外界无法调用 C++ 有构造和转型的规则类型转换:类型 A 被自动转成表达式需要的类型 B。...彻底理解c++的类型转换 两种类型别名: using name = type typedef type name 第一种比较直观。 如果类里有外部类型,名称比较长,可以定义个别名。...10 节 函数编程 函数的目的:封装执行的细节,简化程序的复杂度。 面向对象编程:程序由一个个对象组成,彼此组合、通信完成任务; 函数编程:程序由一个个函数组成,彼此组合、调用完成任务。...14节 并发 一个最基本但也最容易被忽视的常识:“读而不写”就不会有数据竞争 多用 const 关键字,尽可能让操作都是只读的,多线程打造一个坚实的基础。...TAS 来判断获得锁 自定义的 LockGuard,用于在析构函数里 unlock 使用原子变量(atomic)可以实现自旋锁,比互斥量的成本要低,更高效 C++要求静态成员变量必须在cpp文件里定义实现

1.2K30

关于Python闭包的一切

任何把函数当做一等对象的语言,它的设计者都要面对一个问题:作为一等对象的函数在某个作用域中定义,但是可能会在其他作用域中调用,如何处理自由变量?...函数make_averager()在局部作用域中定义了series变量,它的内部函数averager()的自由变量series绑定了这个值。...,即使在函数中变量赋值了,也仍然是自由变量。...注意,对于列表、字典等可变类型来说,添加元素不是赋值,不会创建局部变量。对于数字、字符串、元组等不可变类型以及None来说,赋值会创建局部变量。...对于不可变类型和None来说,赋值会创建局部变量,把自由变量转换为局部变量,这可能会导致程序报错:局部变量在赋值前进行了引用。

3.1K21
领券