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

如何使用GNU make的隐式规则从`foo.s`生成`foo`?

使用GNU make的隐式规则从foo.s生成foo的步骤如下:

  1. 确保系统中已经安装了GNU make工具。
  2. 创建一个名为Makefile的文件,并在其中定义规则。
  3. Makefile中,使用隐式规则来定义从.s文件生成可执行文件的规则。隐式规则是GNU make提供的一种默认规则,可以根据文件的扩展名自动推导出生成目标文件的命令。
代码语言:makefile
复制

定义隐式规则

%.o: %.s

$(CC) -c $< -o $@

定义生成可执行文件的规则

foo: foo.o

$(CC) $< -o $@

代码语言:txt
复制

上述规则中,%.o: %.s表示将.s文件生成.o文件的规则,foo: foo.o表示将foo.o文件生成可执行文件foo的规则。

  1. 在命令行中执行make命令,GNU make会自动根据Makefile中的规则来生成目标文件和可执行文件。
代码语言:shell
复制

$ make

代码语言:txt
复制

GNU make会根据隐式规则,将foo.s文件编译成foo.o文件,然后将foo.o文件链接成可执行文件foo

使用GNU make的隐式规则的优势是可以简化编译和构建过程,无需手动编写繁琐的编译命令,只需定义好规则,GNU make会自动根据文件的扩展名来推导生成目标文件的命令。

这种方法适用于需要从汇编语言文件(.s)生成可执行文件的场景,例如嵌入式系统开发、低级别编程等。

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

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

相关·内容

代码“真面目”---如何查看cpp预处理后程序代码

如果能阅读宏展开后代码,会轻松方便很多。 所以本文目的就是如何方便快捷获得宏展开后代码?...CMake + make 平常验证cpp代码喜欢使用CLion,CLion默认使用CMake + make构建系统,项目结构如下: [Clion项目结构] 分析了CMake默认生成makefile,意外发现里面就有我需要...CMakeFiles/cppConcurrencyDemo.dir/main.cpp.i 进入命令行,和makefile同级别目录,然后执行“make main.cpp.i”,就会生成对应preprocess...Thus, compiling foo.c with -c -save-temps would produce files foo.i and foo.s, as well as foo.o....到这里,对Android NDK两种构建系统,我们都可以快速生成预处理文件了。 4. XCode 最后看下在iOSXCode中,如何查看cpp预处理文件?

5.3K41

Makefile基本用法

来源 https://www.gnu.org/software/make/manual/make.pdf 简单例子 其中cc通过链接,间接指向/usr/bin/gcc。...名为GUNmakefile和Makefile文件同时存在,则使用前者。 调用方法过程中,若前者不存在,则如下脚本给出了如何寻找后者是否存在所需要调用方法,然后执行。...其中,%表示任意,force表示即使当前已经生成了目标仍然执行该方法名对应方法。 force给出一行空依赖显声明,防止force作为%一员,被自身依赖自身构建。...当多个.d文件生成后,其中包含了各个依赖关系,使用include方法包括到文件中,如下包含了foo.d和bar.d。 其中:.c=.d,将source中.c替换为了对应.d。...内容还是挺多,这个文档算是前一半吧。 后面的用到再详细查。 https://www.gnu.org/software/make/manual/make.html

2.5K40

Linux 开发 | 学习 Makefile

@(linux 编程)[开发技能, 工具使用] What is GNU Make Make 是控制工程中通过源码生成可执行文件和其他相关文件工具。...Make 通过 Makefile 获取如何编译、链接和安装清理工程信息。 本文记录如何为自己工程编写一个Makefile,主要参考 GNU Make Manual。获取详细信息请直接阅读手册。...规则 Make 自己推导出来规则,比如目标为 main.o 就推出依赖条件中需要 main.c和对应编译命令 变量定义 类似程序中宏定义, 文本替换。...读入被 include 其他 Makefile,在对应位置展开 初始化变量 推导规则;分析所有规则,创建依赖关系链,决定哪些需要【重新】生成,执行命令。 从第一个 target(排除以 ....这样写一些理由是: 避免 Make 自己推测命令(隐性规则) Make 不会报错他不知道该对象如何生成,并假设已经是最新。

5.3K10

Google DI 框架 Wire

介绍 Wire是一个代码生成工具,使用依赖注入自动连接组件。组件之间依赖关系在Wire中表示为函数参数,鼓励显初始化,而不是全局变量。...wire:生成依赖注入代码wire_gen.go go generate:当存在wire_gen.go时,也就是非初次,还可使用这个命令 生成依赖注入代码 wire_gen.go func InitializeEvent...{} } 生成依赖注入代码 func injectFoo() Foo { foo := _wireFooValue return foo } var ( _wireFooValue...return foo.S } func provideFoo() Foo { return Foo{ S: "Hello, World!"...清理函数保证在此 Provider 任何依赖清理函数之前被调用,必须具有签名func() 不 return 最终生成对象 在依赖注入声明函数中,会返回一个无用对象,因为最终生成依赖注入代码中

63932

makefile文件编写「建议收藏」

objects = foo.o bar.o baz.o files = $(objects:.o=.c) 4、规则定义: 规则是makefile中最重要概念,其告诉make 目标文件依赖关系,以及如何生成及更新这些目标文件...在makefile文件规则有2种,一种是显规则,另一种是规则。...显规则用于说明 何时及如何重新生成目标,其列出了目标依赖文件信息,并通过调用命令来创建或更新目标,其语法一般为: targets : prerequisites recipe...规则用于说明 何时及如何来重新生成一类目标文件根据其名称,其描述了目标是如何依赖于名称相似的文件(一般来说除去后缀信息,其目标与依赖文件名称是一样),并调用命令来创建或更新目标,比如 %.o :...,这样当头文件信息改变后,make程序就知道如何更新目标文件了,而不是整个进行重编译,但这个操作可以看出是非常消耗时间及傻瓜,作为解决方案我们可以通过使用 编译器命令 –M选项来自动完成该工作,比如在

2.2K10

Makefile详细介绍和使用

https://www.cnblogs.com/LittleHann/p/3855905.html 规则是makefile中最重要概念,其告诉make 目标文件依赖关系,以及如何生成及更新这些目标文件...在makefile文件规则有2种,一种是显规则,另一种是规则。...显示规则 显规则用于说明何时及如何重新生成目标,其列出了目标依赖文件信息,并通过调用命令来创建或更新目标,其语法一般为: targets : prerequisites recipe … targets...:为要生成或更新目标 prerequisites:为目标依赖关系 recipe:为生成目标的命令, foo.o : foo.c defs.h cc -c -g foo.c 其中foo.o为target...上面的代码在linux命令窗口下输入make命令就可以执行了,最终会生成一个test可执行文件。如果需要清除生成中间.o文件,输入make clean就可以全部清除了。

57740

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

这个示例来源于GNUmake使用手册,在这个示例中,我们工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。...在定义好依赖关系后,后续那一行定义了如何生成目标文件操作系统命令,一定要以一个Tab键作为开头。记住,make并不管命令是怎么工作,他只管执行所定义命令。...Makefile里主要包含了五个东西:显规则、隐晦规则、变量定义、文件指示和注释。 1、显规则。显规则说明了,如何生成一个或多目标文件。...2、如果生成(或更新)foo.o文件。也就是那个cc命令,其说明了,如何生成foo.o这个文件。...但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同时候使用不同编译规则,等等。本章节就是讲述如何使用make命令

4.2K20

使用 Gcov 和 LCOV 度量 CC++ 项目的代码覆盖率

本篇分享如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率度量,以及在之前 关于代码覆盖率(Code Coverage) 篇中没有提到观点写在了本文最后《不要高估代码覆盖率指标》...其中我比较深入了解过 Squish Coco[1] 它如何使用,但对于大型项目,引入这类工具都或多或少需要解决编译上问题。...当我再次重新调查代码覆盖率时候,我很惭愧发现原来正在使用 GCC 其实有内置代码覆盖率工具,叫 Gcov[2] 前提条件 对于想使用 Gcov 的人,为了说明它是如何工作,我准备了一段示例程序...生成报告 make report 生成报告输出 sh-4.2$ make report gcov main.c foo.c File 'main.c' Lines executed:100.00%...旁注: 还有另外一个生成 HTML 报告工具叫 gcovr[6],使用 Python 开发,它报告在显示方式上与 LCOV 略有不同。

4.8K72

Android Ndk and Opencv Development 2

[2]Android.mk文件 Android.mk文件是用来描述源代码是如何进行编译,ndk-build命令实际上对GNU Make命令一个封装,所以,Android.mk文件写法就类似Makefile...写法[关于Make详细内容可以看这本书,[GNU Make中文手册],虽然是今年读,但是我记得也不多了,老了老了…] Android.mk文件可以生成一个动态链接库或者一个静态链接库,但是只有动态链接库是会复制到应用安装包中...你不需要列出头文件,也不需要显示指明要生成目标文件之间依赖关系(这些内容在GNU Make中是很重要,虽然GNU Make规则也可以做到)。...GNU Make封装,它等价于make -f $NDK/build/core/build-local.mk [参数]命令。...解决方案就是删除NDK自带awk工具(参考网址),这也就是第一节中使用ndk-build -v命令得到GNU Make信息输出不同了,嘿嘿,我这伏笔埋够深吧!

77020

C++(STL):01---pair容器

(p2)Copy构造函数,建立p成为p2拷贝pairp(n)Move构造函数,将rv内容移至p(允许类型转 换) p=p2将p2赋值给p(始自C++11;允许类型转换)P=rv...和val2类型和数值 三、构造函数、赋值、移动语义 规则: ①定义pair时,不给出值时,使用默认构造函数初始化 ②使用圆括号/花括号初始化器进行初始化 默认构造函数 规则:默认构造函数生成一个pair...如果 版本3:合成,template形式构造函数不会掩盖合成拷贝构造函数。...0; } 使用pair创建对象,其元素型是绝对使用make_pair创建对象,其元素类型使用默认。...: /显构造返回 初始化器返回 使用make_pair创建pair对象返回 演示案例: pair process(vector &v) { if (

64220

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

这个示例来源于GNUmake使用手册,在这个示例中,我们工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。...在定义好依赖关系后,后续那一行定义了如何生成目标文件操作系统命令,一定要以一个Tab键作为开头。记住,make并不管命令是怎么工作,他只管执行所定义命令。...Makefile里主要包含了五个东西:显规则、隐晦规则、变量定义、文件指示和注释。 1、显规则。 显规则说明了,如何生成一个或多目标文件。...2、如果生成(或更新)foo.o文件。也就是那个cc命令,其说明了,如何生成foo.o 这个文件。...如果命令太长,你可以使用反斜框(‘\’)作为换行符。make对一行上有多少个字符没有限制。规则告诉make两件事,文件依赖关系和如何成成目标文件。

3.1K20

Using Automake and Autoconf「建议收藏」

make 會用到您專案裡 Makefile 這個檔案,這個檔案列出了各式編譯以及連結步驟,目的,以及一些相依關係。多檔專案與 GNU make 工具程式是有很大關係。...你需要給定以 lib 字母為開頭庫名稱,並且指定該函原始碼以及標頭檔,例如: noinst_LIBRARIES = libfoo.a libfoo_a_SOURCES = foo.h foo.cc...INCLUDES = -I@top_srcdir@/src/includes 注意 SOURCES 巨集會使用底線 ‘_’ 來代替函名稱點 ‘.’。...而且要使用 top_srcdir 這個變數來參考到專案最頂端。 5. 在上一層目錄使用 Makefile.am LDADD 這個巨集,來連結任何可能用到這個暫時函 Code。...它是一個使用一個標準函 C++ 專案。 看看 autoconf 和 automake 手冊來參閱使用一些巨集以及變數。我不要這些範例因為註解而變難以閱讀。

39020

Xmake v2.7.3 发布,包组件和 C++ 模块增量构建支持

我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,另外它还有内置包管理系统来帮助用户解决 C/C++ 依赖库集成使用问题。...使用更加方便 更多背景详情见:#2636 使用包组件 对于用户,使用包组件是非常方便,因为用户是不需要维护包,只要使用包,它配置了相关组件集,我们就可以快速集成和使用它,例如: add_requires...我分析了下,各家编译器对生成带模块 include 依赖信息格式(*.d),差异还是非常大。 gcc 格式最复杂,不过我还是将它支持上了。...新增 gnu-rm 构建规则 Xmake 也新增了一个使用 gnu-rm 工具链去构建嵌入项目的规则和例子工程,非常感谢 @JacobPeng 贡献。...#2944: 为嵌入工程添加 gnu-rm.binary 和 gnu-rm.static 规则和测试工程 #2636: 支持包组件 支持 msvc armasm/armasm64 #3023: 改进

93940
领券