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

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

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

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

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

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

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

相关·内容

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

84440
  • makefile介绍 通俗易懂

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

    84900

    linux下,Makefile是啥??

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

    1.2K20

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

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

    21810

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

    16210

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

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

    3K30

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

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

    12110

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

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

    1K00

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

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

    16610

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

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

    10410

    芯片设计中的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怎么知道我的程序需要被编译呢?

    11310

    【Linux】初步使用makefile

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

    15010

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

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

    2.4K21

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

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

    76440

    Linux工具学习之【gccg++】

    中的编译 gcc/g++ 了,我们一般使用 gcc 编译C语言,g++ 编译C++(当然 g++ 也可编译C语言),这两个编译我们可以当作一个来学习,因为它们的命令选项都是通用的,只是编译对象不同...g++ ,这个编译上手还是很简单的,选项也不是很多 注意: 如果命令失效,很有可能是没有下载 gcc/g++ ,需要自行下载安装 gcc 与 g++ -o 目标文件 gcc 源文件 默认会将代码编译链接并生成可执行文件...在执行完汇编阶段后就停下来,指定保存文件为 test.o 查看生成的 test.o 文件,可以用 readelf 这个工具,缺失的可以去下载 $ gcc -c test.c -o test.o //从源文件重新开始编译...Makefile 中的第一个任务,任务成功执行后,不再继续执行后续任务(一个 Makefile 文件中,可以有多个任务),由此可见,单纯的 make 指令只会执行第一个自动化任务 当我们编写好...Makefile 文件后,可以通过 make 任务名 调用任务,任务名就是 依赖关系 中的左侧名;也可以直接通过 make 调用第一个任务 任务刷新策略 前面说过,同一个方法如果成功执行过,在原文件最近修改时间没有发生变化时

    19420

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

    但是此时,如果修改了 .h 头文件,再次编译时,就出现问题了: 预期的执行流程是:make 发现 .h 头文件的修改时间更新,于是重新编译包含这个头文件的所有 .c 文件。...然后再执行 make 指令,编译一下: $ make gcc -o main main.o 可以看到:make 只执行了 Makefile 中的链接指令(从目标文件 main.o 到可执行文件 main...),并没有执行 gcc main.c -c -o main.o 这条编译指令来重新编译目标文件。...make 发现:main.o 在当前目录中是已经存在的,并且它比 main.c 更新,因此不会重新编译 main.o。...文件的依赖中,这样的话,每次修改 .h 文件后,再执行 make 指令时,就可以重新编译 .o 目标文件了。

    4.5K30

    cmake:在Makefile中运行ant脚本

    他能够输出各种各样的makefile或者project文件,能测试编译所支持的C++特性,类似UNIX下的automake,在c/c++跨平台开发中应用非常广泛 。...在项目初始阶段,java和c/c++代码可以分别用ant和cmake写脚本进行编译,但项目越来越成形,越来越复杂的时候,再分别手工编译就非常容易出错。...很久以前写过一个博客《ant调用make实现Makefile编译》,可以通过shell脚本方式,让ant执行Makefile编译,可以实现用ant统一编译项目代码的需求。...反过来,cmake也可以生成可以执行ant脚本Makefile,以用cmake统一编译项目代码的需求。...,列表中的java代码文件被修改时,就会执行ant脚本编译java代码 # GLOB_RECURSE指定递归搜索子目录 file(GLOB_RECURSE java_srcs "${

    1.7K20
    领券