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

非常简单:为什么我的makefile不能使用通用后缀

通用后缀是指在Makefile中使用的一种特殊规则,可以根据文件的后缀名来自动推导生成目标文件的规则。通常情况下,Makefile可以使用通用后缀来简化编译过程,提高代码的可维护性和可重用性。

然而,如果你的Makefile不能使用通用后缀,可能有以下几个原因:

  1. 语法错误:请确保你的Makefile中的语法是正确的。通用后缀规则的语法是以".后缀"的形式定义目标文件和依赖文件的关系,例如".c.o"表示将.c文件编译成.o文件。请检查你的Makefile中是否存在语法错误,例如缺少冒号、缺少tab键等。
  2. 文件命名不规范:通用后缀规则是根据文件的后缀名来自动推导生成目标文件的规则。如果你的文件命名不符合通用后缀规则的命名约定,那么Makefile就无法正确地推导生成目标文件的规则。请确保你的源文件和目标文件的命名符合通用后缀规则的命名约定。
  3. 缺少依赖文件:通用后缀规则需要指定源文件和目标文件之间的依赖关系。如果你的Makefile中没有正确地指定依赖文件,那么Makefile就无法正确地推导生成目标文件的规则。请确保你的Makefile中正确地指定了源文件和目标文件之间的依赖关系。
  4. 自定义规则冲突:如果你在Makefile中定义了与通用后缀规则相冲突的自定义规则,那么Makefile就无法正确地推导生成目标文件的规则。请确保你的自定义规则与通用后缀规则不冲突,或者优先使用通用后缀规则。

总结起来,如果你的Makefile不能使用通用后缀,可能是因为语法错误、文件命名不规范、缺少依赖文件或自定义规则冲突等原因。请仔细检查你的Makefile,并根据具体情况进行调整和修正。如果仍然无法解决问题,建议参考腾讯云的文档和技术支持,以获取更详细的帮助和指导。

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

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile 使用

3.1 配套视频内容大纲 3.1.1 Makefile 规则与示例 参考文档:gunmake.htm ① 为什么需要 Makefile 怎么高效地编译程序? 想达到什么样效果?...请参考 Visual Studio:修改源文件或头文件,只需要重新编译牵涉到文件, 就可以重新生成 APP ② Makefile 其实挺简单 一个简单 Makefile 文件包含一系列“规则”...Makefile 使用 参考 Linux 内核 Makefile 编写了一个通用 Makefile,它可以用来编译应用程序: ① 支持多个目录、多层目录、多个文件; ② 支持给所有文件设置编译选项...3.1.3 通用 Makefile 解析 ① 零星知识点 A. make 命令使用: 执行 make 命令时,它会去当前目录下查找名为“Makefile文件,并根据它指示去执行操作,生成第一个目标...所以,不能采用‘’和圆括号格式书写该变量,当然,如果需要使用非常文件名,可以在文件名中使用变量引用。

4.3K42

Makefile 使用(在 Linux 中使用 make 命令来编译程序)

3.1 配套视频内容大纲 3.1.1 Makefile 规则与示例 参考文档:gunmake.htm ① 为什么需要 Makefile 怎么高效地编译程序? 想达到什么样效果?...请参考 Visual Studio:修改源文件或头文件,只需要重新编译牵涉到文件, 就可以重新生成 APP ② Makefile 其实挺简单 一个简单 Makefile 文件包含一系列“规则”...Makefile 使用 参考 Linux 内核 Makefile 编写了一个通用 Makefile,它可以用来编译应用程序: ① 支持多个目录、多层目录、多个文件; ② 支持给所有文件设置编译选项...3.1.3 通用 Makefile 解析 ① 零星知识点 A. make 命令使用: 执行 make 命令时,它会去当前目录下查找名为“Makefile文件,并根据它指示去执行操作,生成第一个目标...所以,不能采用‘ ’和圆括号格式书写该变量,当然,如果需要使用非常文件名,可以在文件名中使用变量引用。

9K10
  • Makefile教程

    6.多源文件目录简单模板 通过上面简单示例可以大致了解Makefile基本编写方法与内容,实际上,Makefile可以通过make自动推导特性、内置变量、自动化变量和函数等编写地更加简洁优雅,并且可以模板化...下面看一个简单Makefile模板 假设源文件均为.cpp文件,那么简洁通用Makefile模板可以书写为如下格式: #指定多个源文件目录 DIR_SRC0 = ....(4)Makefile中对一些简单变量引用,可以不使用”()”和”{}”来标记变量名,而直接使用$x格式来实现,此种用法仅限于变量名为单字符情况。另外自动化变量也使用这种格式。...伪Target是用来显示请求执行命令名称。 为什么使用PHONY来指明命令名称: (1)避免和同名文件冲突。...原来这种是老式“双后缀规则”,编译器会自动将Makefile所在目录.cpp识别为源文件后缀,而.o识别为输出文件后缀。特别需要注意是,后缀规则不允许任何依赖文件,但也不能没有命令。

    4K53

    Linux工具学习之【gccg++】

    编译器 gcc/g++ 了,我们一般使用 gcc 编译C语言,g++ 编译C++(当然 g++ 也可编译C语言),这两个编译器我们可以当作一个来学习,因为它们命令选项都是通用,只是编译对象不同...生成文件后缀为 .o 因为计算机只能看懂二进制,所以将代码转为二进制是必须进行操作,除此之外,还有一个重要步骤:生成符号表 关于符号表 这个东西相当于函数独一无二地址,在Linux 中,C语言符号表比较简单...文件 要想使用 make 指令,就得先有 Makefile 文件,Makefile 文件中主要编写任务,而任务由 依赖关系 + 依赖方法 构成 1.依赖关系 比如源文件为 test.c ,编译后生成文件为...文件并执行相关任务,使用了 make file 指令,并没有直接使用 make指令,因为这个指令还是有些说法 单纯输入 make 指令时,默认执行 Makefile第一个任务,当任务成功执行后...,期待留下一个小小赞,你支持是分享最大动力!

    21020

    【Linux】Linux开发工具-vim 编译器-gccg++ 调试器-gdb git操作 项目自动化构建工具-makeMakefile

    这里,介绍一个非常简单指令->nano 这个指令就类似于我们Windows中记事本,使用方法也很简单 1.2 nano指令使用 1.2.1 介绍 nano指令使用主要分为五步 创建.c文件 nano...动态库一般后缀名为“.so”,如前面所述 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。...使用c++11标准 gcc不能编译c++代码,但是g++可以编译c语言代码 g++也可以加-o选项,编译成指定可执行程序 c++文件后缀 c++文件后缀有三种:.cc .cpp .cxx (...动态库一般后缀名为“.so”,如前面所述 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。...,即如果在找了依赖关系之后,冒号后面的文件还是不在,那么对不起,就不工作啦 #include int main() { printf("hello Makefile!

    8910

    Linux makefile 教程 非常详细,且易懂

    六、另类风格makefile 即然我们make可以自动推导命令,那么看到那堆[.o]和[.h]依赖就有点不爽,那么多重复[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容易...为什么需要使用这样步骤?...下面是取值: a —— 也就是all,输出所有的调试信息。(会非常多) b —— 也就是basic,只输出简单调试信息。即输出不需要重编译目标。...隐含规则 ———— 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常东西,比如,我们编译C/C++源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]...这个变量对于构造有关联文件名是比较有较。如果目标中没有模式定义,那么”*”也就不能被推导出,但是,如果目标文件后缀是make所识别的,那么”*”就是除了后缀那一部分。

    4.3K20

    开篇:预备知识---2

    链接 ​ 我们已经通过上面的 汇编 步骤得到二进制文件了,为什么不能执行呢?因为我们上面的到不是真正可执行文件,其缺少一些必要系统入口代码和库实现文件。...那么假设我们有一个非常程序,其需要链接很多个 .o 文件,那么我们总不能每编译一次就写一次这么长命令行吧。...不知道小伙伴有没有好奇,在上面将 custom1.o 和 custom2.o 打包成一个库时候为什么要将打包后库文件命名为 libcustom.a。...动态库和静态库 ​ 在上面我们已经成功创建并使用了我们自己库(libcustom.a)。为什么要将库文件命名为 libcustom.a 呢?这其实和库文件种类和命名标准有关。...因为 PC 为 Windows 系统,因此这里将生成动态链接库文件后缀名设置为 .dll,如果是 Linux 系统,那么文件后缀名改为 .so。

    76920

    Makefile经典教程(掌握这些足够)

    1.6 另类风格makefile     即然我们make可以自动推导命令,那么看到那堆[.o]和[.h]依赖就有点不爽,那么多重复[.h],能不能把其收拢起来,好吧,没有问题,这个对于make...值得一提是,这种方法,前面的变量不能使用后面的变量,只能使用前面已定义好了变量。...endif endif 当然,你也许会说,使用override关键字不就可以重新定义环境中变量了吗?为什么需要使用这样步骤?...下面是取值: a —— 也就是all,输出所有的调试信息。(会非常多) b —— 也就是basic,只输出简单调试信息。即输出不需要重编译目标。...隐含规则 ———— 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常东西,比如,我们编译C/C++源程序为中间目标文件(Unix下是[.o] 文件,Windows下是

    2.7K20

    可移植 Makefile 教程

    Makefile 头 10 年里,养成了一个非常不好习惯 -- 完全严格使用 GNU Make 扩展名。...当项目不大时候,Makefile 应该是相当简单,并且随着项目的成长,以一种可预见,清晰方式不断丰富。 不会覆盖 make 每一个特性。如果想要学习所有完整内容,你需要自行阅读它规范。...本指南将会详细讨论一些重要特性和约定俗成规定。遵守已有的约定是非常重要,这样使用 Makefile 其他人,才能知道它能够完成和如何完成一些基本任务。...在一个规则中,命令会随即跟在目标或先决条件那一行后面。每个命令行必须以一个 tab 字符开头。如果你编辑器不能进行相关配置的话,可能会非常麻烦。...del /f 并不能达到同样效果。 所以,尽管它与 POSIX make 已经很接近,但是想要写一个 Makefile 能够同时被 POSIX make 和 Nmake 同时使用,是不太实际

    1.3K10

    Linux 内核编译 LOCALVERSION 配置(分析内核版本号自动添加+号)

    1 问题发现 编译主线 kernel 版本时候发现, 内核版本编译成功后生成版本号变成了 "x.y.z+", 为什么后面会多一个加号呢?...都会出现 + 后真的感觉很郁闷, 强迫症真的受不了. 2 原因分析 问题必然出现在 linux 构建过程中版本控制这一块, 既然是在构建过程中添加, 那我们就可以从 Makefile 中发现一些端倪...这些是我们内核版本版本号, 生成出来版本号理论上不应带 + 号, 但为什么带 + 号呢....内核中有两个配置宏 CONFIG_LOCALVERSION 和 CONFIG_LOCALVERSION_AUTO 配置了系统内核版本号和后缀信息. 2.2 Makefile 中读取和设置版本号 我们检索与这两个宏相关信息...如果代码属于 git 管理 打了 tag, 则会添加tag相关字符 如果 tag 只是简单标记, 比如 4.14-rc8 则跳过, 因为这些信息已经从前面 makefile 中获取到了 没有打 tag

    3.6K20

    Linux中Makefile文件详解

    以下是一个简单 Makefile 文件示例,以及对其中关键部分详细解释: 1....变量引用: 使用 @ 表示目标,^ 表示所有依赖文件, 通配符: 使用 % 通配符来表示一类文件,例如 %.o: %.c。 Makefile 是一个非常强大工具,可以用于管理复杂项目结构。...以上示例是一个简单入门级别的 Makefile,实际项目中可能会包含更多配置和规则。 5....通用规则 如果有多个类似的目标文件,可以使用通用规则。通用规则使用通配符 % 来匹配文件名一部分。...make 使用一个名为 Makefile 文件,其中包含了一系列规则和指令,描述了文件之间依赖关系以及如何生成目标文件。以下是一个简单 Makefile 文件结构和基本要素: 11.

    94810

    Linux编译gccg++、自动化构建工具makemakefile

    目录 1.g++/gcc使用 2.Makefile ---- 1.g++/gcc使用 在学习gcc/g++之前,需要先回顾一下程序翻译过程: 预处理(头文件展开、去注释、宏替换、条件编译) 编译...因此,以下代码含义: 预处理: gcc -E test.c -o test.i -o:指明形成临时文件名称,.i(后缀,在linux中后缀没意义,是给人看) ;-E:从现在开始,进行程序翻译...,那么,去掉前缀和后缀,剩下就是我们需要知道库。...makefile是一个文件,make是一个命令。 如何使用makefile?注:可以大写,可以小写。...其实访问它,确实是会变,但是呢,如果在短时间内(非常时间),它不会变。即不会频繁去改变时间。其原因是,我们会频繁地访问文件,如果频繁地去修改时间,意味着要非常多次地去访问磁盘,是一个负担!

    2.1K20

    makefileinclude作用(makefile变量)

    大家好,又见面了,是你们朋友全栈君。...或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样。 这里用到makefile替换引用规则,即用您指定变量替换另一个变量。...它标准格式是 $(var:a=b) 或 ${var:a=b} 它含义是把变量var中每一个值结尾用b替换掉a 今天在研究makefile时在网上看到一篇文章,介绍了使用函数...对于一个已经定义变量,可以使用“替换引用”将其值中后缀字符(串)使用指定字符(字符串)替换。.../myfile 起初使用是变量替换引用方式,但是却始终不生成中间.o文件,但是使用patsubst后,一切正常了,如果你知道为什么,请留言告诉吧 发布者:全栈程序员栈长,转载请注明出处:https

    3.3K50

    图解嵌入式系统开发之Makefile

    很多人学习嵌入式开发首先遇到问题肯定是代码写在哪里?如何让代码编译进系统 ?...如果你是在培训班学习,老师肯定会告诉你先不要管他怎么编译进系统,你只需要在代码所在目录下Makefile中添加上你代码文件名字(后缀.c改成.o)就行了。...看了好多网文,博客之后,你是否仍然一头雾水,这TM到底是怎么联系起来为什么会有这么多Makefile文件?...cmd.h #使用静态规则,定义通用编译方法 %.o: %.c gcc -c $< clean: rm -rf *.o $(TARGET) 编译50个源文件 TARGET := app SRC...-f $(ROOTPATH)/Makefile.build clean;\ done; rm -rf *.o *.d 次Makefile: 次Makefile数量非常多,一般在每个代码目录下都会有一个

    1.3K40

    Linux基本工具——gccg++与makeMakefile

    (这里是test.i,正常来说预处理完成之后生成就是后缀为.i文件) 然后打开test.i来看一下: 左边是test.c内容,是,右边是预处理之后内容,上面的这些内容是头文件展开内容...linux下默认使用动态链接。 如果想用静态链接就需要编译后面加上-static: 静态链接内存也是非常之大,再用ldd去看时候就会告诉我们不是靠动态链接执行。...windows下动态库和静态库后缀 动态库:.dll 静态库:.lib Linux项目自动化构建工具——make/Makefile make/Makefile是什么 make是一个命令,makefile...make/Makefile使用 首先需要先创建makefile这个文件,必须叫这个名字,第一个M可以大写。...依赖方法必须以tab键开头,不能是四个空格键。 后面就是你实现依赖关系依赖方法操作。

    61800

    Linux 下make命令与Makefile

    大家好,又见面了,是你们朋友全栈君。...下面是取值: a: 也就是all,输出所有的调试信息。(会非常多) b: 也就是basic,只输出简单调试信息。即输出不需要重编译目标。...用“后缀规则”来定义隐含规则会有许多限制。使用“模式规则”会更回得智能和清楚,但“后缀规则”可以用来保证我们Makefile兼容性。...这个变量对于构造有关联文件名是比较有较。如果目标中没有模式定义,那么*也就不能被推导出,但是,如果目标文件后缀是make所识别的,那么*就是除了后缀那一部分。...这个特性是GNUmake,很有可能不兼容于其它版本make,所以,你应该尽量避免使用*,除非是在隐含规则或是静态模式中。如果目标中后缀是make所不能识别的,那么?

    10.2K20

    深度刨析makefile

    为什么要有 makefile 我们在学习 Linux 时候,一般都是直接通过 gcc 对源文件进行编译,我们可以通过指定 gcc 参数来指定生成什么样文件、使用哪个库、在哪个路径搜索等等。...makefile 自动推导功能是非常强大,比如说我们定义变量 Src = 1.c 2.c 3.c ,假如说在生成 2.o 目标的时候,我们直接在 gcc 命令中使用变量 Src,它也可以推导出源文件为...因为大部分隐含规则都是使用后缀规则来定义,所以,只要隐含规则中有后缀列表,那么隐含规则就会生效。...include 关键字所在行首可以含有(任意个)空格,这些空格在读取时候会被自动忽略,但是,绝对不能使用 Tab 开始,因为 Tab 开始都会被作为 shell 命令,会把 include 当作...但是了解 makefile 语法、变量、函数、规则等等更深层次知识也是非常有必要

    11310
    领券