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

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

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

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

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

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

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

相关·内容

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

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

14410

【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的修改时间来判断是否要重新编译!

85040
  • makefile介绍 通俗易懂

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

    86700

    linux下,Makefile是啥??

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

    1.2K20

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

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

    23110

    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是一种代码管理

    20310

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

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

    3.1K30

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

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

    13010

    【Linux】Linux 项目自动化构建工具 -- makemakefile 的使用

    比如哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行一些复杂的功能操作。...,如果我们 make 每次都重新编译,势必会浪费很多时间。...那么 make 是如何判断源程序不需要重新编译的呢?答案是根据文件的修改时间 (modify time) 来判定。...,而是累积一定访问次数或者累积一段时间才更新: 而 make 则是根据可执行程序的修改时间 (modify time) 与源文件的修改时间的对比来判断源程序是否需要重新编译: 注:make 判断源文件是否需要重新编译只与源文件的修改时间变动有关...,并不会直接读入或输出,而是会先被存放到输入缓冲区与输出缓冲区中,待缓冲区刷新时数据才会才会被读入或输出; 而行缓冲是缓冲区类型的一种,在行缓冲下, 在输入和输出中遇到换行符时,才执行真正的I/O操作

    1K00

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

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

    17210

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

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

    11210

    芯片设计中的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.8K40

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

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

    12410

    【Linux】初步使用makefile

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

    15510

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

    3、makefilemakefile是一个描述哪些文件需要编译,哪些文件需要重新编译的文件。类似于一个脚本,可以在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系统间共享,简化了跨平台开发。

    7110

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

    一、前言 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。...一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行复杂的功能操作。...access:是进入文件的时间,但是一个系统运行起来的时候,同时会进入非常多的文件,如果每进入一次,就修改大量文件的时间,那么也太浪费性能了,所以就规定了一段时间进入了一定次数后才修改时间。...当可执行文件生成的时候会得到这三个时间,如果我们源文件修改了,时间也会刷新,源文件的内容修改时间要比可执行文件的时间晚的时候,那么这时候我们输入 make 才会重新编译。...mycode.c 生成,然后mycode.s 依赖 mycode.i 生成……,最终生成了mycode,但是我们实际上写的时候是没必要这样写的, 我们直接mycode依赖mycode.c就行了,其他的编译会自动处理的

    77840

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

    1.为什么要有make/makefile不会makefile可以从侧面说明一个人是否具备完成大型工程的能力。...当在公司工作时,往往一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行复杂的功能操作...makefile带来的好处就是–”自动化编译“,只要预先写好makefile,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。...在寻找过程中,如果重新错误,比如最后被依赖的文件找不到,那么make就会自己退出,并报错,而对于所定义的命令的错误,或者编译不成功,make完全不管。...像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过我们可以显示要make执行,即命令:make clean,以此来清理所有的目标文件,以便于重新编译

    8010
    领券