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

当链接器脚本更改时,Makefile不会重新编译

是因为Makefile是一种用于自动化构建和编译代码的工具,它根据源代码文件和相关的依赖关系来确定需要重新编译的文件,而不是根据链接器脚本的变化。链接器脚本主要用于指定代码的内存布局和链接方式,它在编译过程中起到了将各个目标文件进行链接的作用。因此,当链接器脚本发生变化时,通常并不需要重新编译代码,而只需要重新链接生成可执行文件或库文件。

Makefile通常会监视源代码文件的变化,并根据文件的修改时间戳来判断是否需要重新编译。如果链接器脚本的修改没有影响到源代码文件的依赖关系,那么Makefile并不会重新编译代码。如果确实需要重新编译代码以反映链接器脚本的变化,可以手动执行make clean清除之前的编译结果,然后再执行make重新编译。

需要注意的是,在Makefile中可以通过添加自定义规则来处理链接器脚本的变化。例如,可以在Makefile中定义一个目标规则,该规则依赖于链接器脚本文件,并在链接器脚本文件发生变化时执行相应的操作,如重新链接代码。这样可以确保在链接器脚本变化时自动触发重新编译的过程。

总结起来,当链接器脚本发生变化时,Makefile不会自动重新编译代码。如果链接器脚本的变化确实影响到了源代码文件的依赖关系,可以手动执行make clean和make命令来重新编译代码。

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

相关·内容

Linux项目自动化构建工具-makeMakefile

,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译...这个是对比时间对比出来的,只要可执行程序的最近更改时间,比所有源文件的修改时间都要新,这样就说明他是最新的文件。 那么源文件的修改时间会不会和可执行程序的最近修改时间完全一致呢?...当多个源文件编译形成可执行程序时,只对其中的一两个文件进行修改时,重新编译源文件时,是全部重新编译还是编译部分? 是对修改源文件进行编译,然后在与之前的源文件编译过的文件进行链接。...我们发现其实上对比时间的工作是有make和makefile来做的,gcc并不关心。所以,当添加了这个伪目标后,make和makefile就默认不会对这个文件继续进行时间对比的操作。...对于编译器来说,还是尊重编译器的规则,毕竟他的规则非常正确。 如果,项目比较大时,每个源文件都要重新编译的话,太浪费时间了,效率低下。

8110

【Linux必备工具】自动化构建工具makefile的使用详解

那如果我们需要去手动实现呢:多文件 我们应该先编译哪一个程序?链接需要哪些库?整个项目结构,该如何维护......在 Linux 环境中,我们需要更手动、细致地管理这些方面。...(提高编译效率) 若源代码没有更改也重新编译,那么每次预处理编译汇编链接的时间比较长,成本高 make/Makefile是如何知道文件更改过的?...答:通过源文件的修改时间和形成的可执行程序(也是文件)的修改时间做对比。 重新编译的本质:重新写入一个二进制的可执行文件(bin文件),文件的修改时间会跟着更改。...源文件的修改时间 改时间 第二 ~~ N 次的时候,我们对源文件做任何修改的时候, 源文件的修改时间 > bin文件的修改时间​​​​​ 重新编译形成可执行 大部分情况下重新编译都没问题...Change(对属性修改):当文件的权限、所有者、链接数或文件名甚至文件大小发生变化时,更改时间(ctime)会被更新。

22510
  • 【Linux操作系统】自动化编译make和Makefile

    一.make/makefile简介 1.什么是make,makefile? make是一个构建C++项目的工具/命令;makefile是一个包含编译命令的脚本文件。...通过make工具解释makefile文件中的命令,进行我们的项目编译。 2.为什么要有make/makefile?...Linux环境下开发,工程源文件较少时,可使用gcc直接编译;但当工程源文件较多时,gcc直接编译复杂(比如命令较多,文件的编译先后顺序确定问题等)且不易于后期项目的维护,因此采用make/makefile...回顾一下文件属性: Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。...到这里我们也能解释为什么.PHONY有一个特点:被.PHONY修饰的总是能被执行,那可能就是.PHONY修饰后不再通过比较test和test.c的修改时间来判断是否要重新编译!

    86040

    makefile介绍 通俗易懂

    Make 可自动决定一个大程序中哪些文件需要重新编译,并发布重新编译它们的命令。Make的使用不仅限于程序,它可以适用于任何如果一些文件变化导致另外一些文件必须更新的任务。...关于编译和链接 编译:生成目标文件(编译时,编译器需要的是语法的正确,函数与变量的声明的正确) 链接:生成可执行文件(链接时,主要是链接函数和全局变量,把目标文件链接成应用文件) Windows程序开发一般包括...嵌入式程序开发一般包括: 1、编辑 2、指定链接地址 3、指定连接顺序 4、编译链接 5、执行(烧写到单板再启动) Linux程序开发一般包括: 1、编辑 2、链接脚本 3、用命令行链接文件顺序 4、运行命令行...如果有编译后的目标文件,但此工程的头文件被改变了,那么需要编译引用了这几个头文件的.c文件,并链接目标程序。 通过上面的这些规则,避免了每次Make都去重新编译或者链接。...注:make只会检查文件依赖,不会对命令进行检查。所以命令写错了是不会报错的。

    87500

    linux下,Makefile是啥??

    《概念篇》 Makefile的概念 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译...,甚至于进行更复杂的功能操作,因为 Makefile就像一个Shell脚本一样,也可以执行操作系统的命令。...在上述黄色自体中,可以明确的是,make执行时,它会校验依赖文件的更性时间,如果目标文件跟依赖文件时间一致,则不会相应的命令。...在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像你C语言中的 宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 文件指示。...根据依赖关系,决定哪些目标要重新生成。 执行生成命令。 Makefile分为多个章节进行书写,有些概念描述参考与某些资料。

    1.2K20

    Linux:常用软件、工具和周边知识介绍

    特点: 动态库的代码不会被复制到可执行文件中,而是在程序运行时由动态链接器加载到内存中。 可执行文件相对较小,因为它只包含了链接到动态库的信息,而不是实际的库代码。...动态库的更新更加灵活,只需要替换动态库文件,不需要重新编译程序。 使用方法:在编译时,通过链接器将动态库与目标文件链接成一个可执行文件,并在程序运行时由动态链接器动态加载。...常见的依赖方法包括编译源文件、链接目标文件等。 依赖方法通常使用命令工具(如编译器、链接器等)来执行所需的操作。...否则,如果目标文件的修改时间比源文件的修改时间更晚,make 工具认为该目标文件是最新的,不需要重新构建。 对于可执行文件来说,make 工具也会比较可执行文件和它所依赖的源文件的修改时间。...如果可执行文件的修改时间比源文件的修改时间更晚,或者源文件的修改时间比最新的可执行文件的修改时间更晚,那么 make 工具会重新构建可执行文件。

    27110

    程序员C语言快速上手——工程篇(十三)

    当C语言工程很大,源码非常多时,如果还去使用GCC命令编译程序,几乎是不现实的。这时候,可以通过编写shell脚本去执行编译命令,当然这并不是一种好的方式。...Makefile 脚本 Makefile 脚本文件是GNU make 工具的输入文件,它也包含一套自己的语法规则,它也能帮助C语言实现编译和链接。...虽然命令行脚本也能帮助编译链接,但是它的能力还太弱,它每次都会将所有文件重新编译,例如有几百个源文件,我仅仅只修改了其中一个源文件,那么重新编译时,这几百个源文件也都会重新编译,这样每次编译一下都会耗费大量时间...现在我们用CMake工具编写构建脚本,就与平台无关了,它会自动生成对应平台的构建方案,再也不用程序员去操心了。更准确的说,CMake工具真正厉害的地方并不只是跨平台,而是跨编译环境。...,完成后build目录下即生成main.exe 当链接已经编译好的库时,推荐使用find_library来查找库,因为link_directories命令传入相对路径时,会直接将相对路径传给编译器,导致出现找不到问题

    3.1K30

    Linux基础——Linux开发工具(下)_makemakefile

    Linux项目自动化构建工具 - make/makefile 1.1 make/makefile的背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数...,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是...总是不让重新编译代码 1.4 文件的三个属性 我们先了解以下系统为什么要在第二次make的时候将我们的请求给拒绝: 从效率上来看:文件在第二次make的时候并没有被修改,所以系统为了提高效率而拒绝make...通过一个文件修改的时间 第一次的时候,一定是先有源文件,才有可执行文件 源文件的修改时间改时间 第二/n次的时候,我们对源文件做任何修改的时候 源文件的修改时间>可执行文件的修改时间...:mytest ^表示:test.c 如果不想指令打印在显示器上我们可以在对应行前面加:@ 此时删除时的提示被隐藏 2. git的简单介绍以及使用 2.1 git的简单介绍 git是一种代码管理器

    22810

    快速上手makefile自动化构建工具

    前言:   在windows下,很多东西都是编译器直接帮你做好的,而在Linux下并不是这样,如果也想要实现自动化,就要会写makefile,那么话不多说,开启我们今天的话题!...✈️ makefile背景  会不会写makefile,从侧面说明了一个人是否具备完成大型工程的能力。  ...一个工程中的源文件非常多,其按照类型、模块等放在不同的目录下,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,以及重新编译等,甚至更复杂的操作。  ...当文件被访问时,这个时间会被更新。 Change(变更时间):当文件的属性被改变时,那么Change这个时间就会被更新。 Modify(修改时间):代表文件内容的最后修改时间。...当文件的内容被修改时,这个时间就会被更新。

    14110

    Linux项目自动化构建工具-makeMakefile

    本篇文章小编将详细介绍 会不会写makefile,从侧面说明一个人具不具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定...,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率...文件内容时,是从上往下读取,默认认形成第一个目标文件 习惯上把形成可执行程序放在上面,make就可以直接形成 在编译时,默认情况下,如果可执行程序是最新的了,make就不会再去编译,如果就想让编译这个操作总是可以被执行...更重要的是,如果每次都重新编译,源代码可能都没有改,重新去编译效率会很低。 这要做的主要目的是提高编译效率。 makefile怎么知道程序需要重新编译?...因此,makefile只需对比可执行文件最近修改时间和源文件最近修改时间,如果可执行文件最近修改时间新,就不需要重新编译;如果源文件最近修改时间新,就需要重新编译。

    18210

    Linux项目自动化构建工具-makeMakefile

    1.背景 会不会写 makefile ,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中, makefile 定义了一系列的规则来指定...,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作 makefile 带来的好处就是 ——“ 自动化编译 ” ,一旦写好,只需要一个 make 命令,整个工程完全自动编译...如果在vs中写程序的时候,有100个源文件,那么我们是要把每个.c文件或者.cpp文件经过预处理,编译,汇编编译成.o文件 ,然后再把这些.o文件链接起来,生成1个或者多个可执行程序。...那么这些事情是编译器帮我们做的,那么在linux中就需要我们手动去做了,在linux中自动化构建项目的工具就是make/makefile。 2.理解 那么make是什么呢?...那么make/makefile是如何直到可执行程序是最新的呢?其实是通过对比时间来确定的,只要可执行程序的最新修改时间比源文件的修改时间新,就说明它是最新的。

    12110

    芯片设计中的Makefile简明教程

    Makefile可以做什么? Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。...当依赖文件有修改时,或者目标不存在时,则执行命令vcs -full64 -sverilog tb.sv dut.v来生成simv。...由于伪目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。 我们常常在Makefile的开头来用.PHONY显式指明伪目标。...我更倾向于后者,可以帮助我们回忆如何使用Makefile脚本。...Makefile的引用与复用 最后还有一点,我们也会经常遇到,把共用的Makefile脚本写到common.mk,然后再include common.mk,这样可以让Makefile看起来更简洁。

    1.9K50

    【手把手系列】:芯片设计中的Makefile简明教程

    Makefile可以做什么? Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。...当依赖文件有修改时,或者目标不存在时,则执行命令vcs -full64 -sverilog tb.sv dut.v来生成simv。...由于伪目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。 我们常常在Makefile的开头来用.PHONY显式指明伪目标。...我更倾向于后者,可以帮助我们回忆如何使用Makefile脚本。...Makefile的引用与复用 最后还有一点,我们也会经常遇到,把共用的Makefile脚本写到common.mk,然后再include common.mk,这样可以让Makefile看起来更简洁。

    1.9K40

    自动化构建与进度显示:全面解读 make 与 Makefile

    通过定义编译规则,Make工具可以根据源文件的更新情况,自动决定哪些部分需要重新编译,从而提高开发效率。...make 的主要功能 自动化构建:通过规则定义编译、链接等步骤,减少重复操作。 增量编译:仅编译发生变化的文件,优化构建时间。 灵活性:支持复杂的依赖关系和自定义任务。...补充: 执行 make 时,code 被编译成 code.c ,之后当文件内容没有发生更改时,是无法再次 make 的,这是通过比较 code.c 与 code 的修改时间 (Modification...Time) 来做到的,当 code.c 的修改时间早于 code 的修改时间时就无法再次 make 。...%.o: %.c :所有的.o文件都可以通过对应的.c文件生成 Make 和 Makefile 的优缺点 优点 自动化构建:减少手动输入编译命令的重复劳动。 高效增量编译:仅重新编译必要的文件。

    14210

    【Linux】自动化构建工具-makeMakefile

    前言 在上一篇中已经了解了【Linux】编译器-gcc/g++使用,这次来一起看看make/Makefile。 2....再次打开makefile: 退出后直接用命令清理一下 make clean 发现mytest已经没有了: makefile文件中,保存了编译器和链接器的参数选项,并且描述了所有源文件之间的关系...make程序会读取makefile文件中的数据,然后根据规则调用编译器,汇编器,链接器产生最后的输出。 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。...3.3 PHONY:XXX 当我们在程序里面不加上: 来make一下后,在make一下,发现就不行了: 在程序不被修改时,make后,默认就不会在形成新的可执行程序,它认为没有必要。...既然形成的可执行程序都是新的,那么就不需要再重新编译。 就是为了提高编译效率。 那么是怎么做到不重新执行的呢?换句话说makefile怎么知道我的程序需要被编译呢?

    13910

    【Linux】初步使用makefile

    1 快速使用 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译...,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率...可见,makefile都成为了一种在工程方面的编译方法。...,完成编译/清理工作。...如何实现源代码修改了才会重新编译 只有源代码的“修改时间” 比 可执行程序 的“修改时间”新 ,才会重新编译。

    15510

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

    3、makefile篇 makefile是一个描述哪些文件需要编译,哪些文件需要重新编译的文件。类似于一个脚本,可以在Makefile文件中执行系统命令。...在程序只有几个.c文件时,gcc一个个编译还可以,当工程较大,几十个几千个.c文件时,很麻烦。...或者是其中某一个.c文件修改,重新开始编译,就很麻烦有木有啊有木有~ 最好的额解决方式就是哪个文件修改了编译哪个文件即可,其他没有编译的文件就不需要再次重新编译。...根据gcc的译码器流程:预处理、汇编、编译、链接。 我们可以在这个方面做做手脚,我们运行gcc时,只运行到编译这一步,先不链接: ?...4、makefile编译脚本 1、脚本创建 在main.c的目录中创建Makefile文件,首字母M一定要大写!,之后在Makefile文件中输入脚本内容,每一行首需要空出来的地方一定要使用TAB键!

    2.4K21

    【Linux探索学习】第九弹——Linux工具篇(四):项目自动化构建工具—makeMakefile

    spm=1001.2014.3001.5482 前言: 在前面我们学习了如何用编译并执行,在现代软件开发中,构建一个项目涉及多个步骤,从编译源代码到链接库文件,再到生成最终的可执行文件。...Makefile是一个文本文件,其中包含了构建项目所需的规则和指令。一个典型的Makefile包含以下部分: 变量定义:用于定义编译器、编译选项等。 目标:需要生成的文件,如可执行文件或对象文件。...首先,我们要先明白为什么要有这个自动化构建工具,在我们之前的学习中,我们在编写代码的时候会经常用到gcc和删除相关的指令,每次都需要我们重新创建并删除可执行文件,这个操作比较冗余,且当工程比较大时,这种操作就会显得非常麻烦...3、当源文件不变时,只能编译一次 我们来看这样一个现象: 当我们的源文件没有改动时,我们只能make编译一次,之后就无法再编译了,这样的原因其实是为了提高编译效率,那么make指令具体是怎么做的呢...处理依赖关系:Make会自动处理文件之间的依赖关系,只有被修改的文件会被重新编译。 跨平台性:Makefile可以在多种Unix/Linux系统间共享,简化了跨平台开发。

    7610
    领券