关于makefile:Makefile-简易教程

如果你是命令行重度使用者,学习 Makefile 将能够大大提高你的开发效率,上面简略介绍一下 Makefile 的常识和应用形式。 Makefile 是一种蕴含一组指令来编译和构建软件我的项目的文件。 Makefile 文件通常蕴含一组规定和依赖关系,以指定如何将源代码编译成可执行文件或库。 当执行 make 命令时,make 工具将解析 Makefile 文件,并依据定义的规定和依赖关系来执行所需的操作,以生成最终的指标文件。 Makefile 是一个罕用的构建工具,尤其在 Unix 和 Linux 零碎上宽泛应用。 Makefile文件由一系列规定(rules)形成。每条规定的模式如下。 规定语法 target ... : prerequisites ... command ...下面第一行冒号后面的局部,叫做"指标"(target),冒号前面的局部叫做"前置条件"(prerequisites); 第二行必须由一个tab键起首,前面跟着"命令"(commands)。 "指标"是必须的,不可省略;"前置条件"和"命令"都是可选的,然而两者之中必须至多存在一个。 每条规定就明确两件事:构建指标的前置条件是什么,以及如何构建。 上面就具体解说,每条规定的这三个组成部分。 示例文件 .PHONY: test #.PHONY 伪指标,代表无论 test 文件或目录是否存在都会执行 make test 命令txt = Hello World #Makefile 容许应用等号自定义变量。all: clear test php #当执行 make 不带其余命令时,默认执行第一条python: -python vv #命令前加 - 代表执行谬误继续执行上面的命令 php -v #井号(#)在Makefile中示意正文。php: @php -v #失常状况下,make会打印每条命令,而后再执行,这就叫做回声(echoing)。在命令的后面加上@,就能够敞开回声。clear: cleartest: @echo $(txt) #应用变量 @echo =============这是一篇比拟简洁的文章,心愿能够让您对 Makefile 有一个根本理解。 ...

May 15, 2023 · 1 min · jiezi

关于makefile:轻松玩转makefile-基础用法

前言本文通过几个简略的示例,能够疾速理解Makefile的根本应用办法,实用于编译咱们平时练习所编写的小量代码。 1. make命令Makefile文件内容: all为<font color='green'>指标</font>,这里没有<font color='green'>依赖</font>的文件,这条<font color='green'>命令</font>是打印(echo)出“Hello Makefile”这行文字 all: echo "Hello Makefile"运行make后,终端打印的内容 $ makeecho "Hello Makefile"Hello Makefile能够看到,Makefile的命令也打印在了终端,要想不输入命令的内容,能够在命令后面加上@ make能够指定要生成的指标,如果不指定,则默认第一个指标,咱们将Makefile文件内容批改一下 all: @echo "Hello Makefile"test: @echo "Hello Test"运行不同的命令,能够看到不同的打印信息 $ makeHello Makefile$ make allHello Makefile$ make testHello Test2. 生成文件假如当初有两个文件fun.c和main.c,须要利用Makefile生成一个可执行文件app。fun.c的内容 #include <stdio.h>void fun(){ printf("This is fun()!\n");}main.c的内容 extern void fun(); int main(){ fun(); return 0; }Makefile的内容 all: main.o fun.o gcc -o app main.o fun.omain.o : main.c gcc -o main.o -c main.cfun.o : fun.c gcc -o fun.o -c fun.cclean: rm app main.o fun.o当执行make命令后,终端会打印下列内容,并生成对应的app , main.o ,fun.o文件 ...

March 1, 2023 · 1 min · jiezi

关于makefile:轻松玩转makefile-基础知识

1、什么是Makefile 在嵌入式软件开发畛域,应用 make 工具构建开发环境是十分常见的。而要应用 make 工具,就须要编写 Makefile 文件来定义一系列规定,指定须要先编译、后编译以及从新编译的文件。 应用 Makefile 的益处是实现了“自动化编译”,只须要一个 make 命令,整个工程就可能主动编译,大大提高了软件开发效率。 2、Makefile的规定2.1 命名规定 通常状况下,无论是应用"Makefile"还是"makefile"作为文件名都能够,常见的是应用"Makefile"作为文件名。 当然你也能够应用其余名称(例如"My_makefile")来命名Makefile,但在应用时应该加上-f选项,如: make -f My_makefile2.2 书写规定指标 (target):指的是运行make生成什么,能够是执行文件,还能够是一个标签 依赖(prerequisites) : 要生成那个 target 所须要的文件或是指标 命令(command ):make 须要执行的命令 target : prerequisites command # 例如test: test.c gcc test.c -o test<font color='red'>留神</font>,命令所在的行必须是以 Tab 结尾。很多初学者容易犯的“低级”谬误是,用空格代替结尾的Tab 键。 3、Makefile的工作原理3.1 指标文件的生成先查看生成指标文件所须要的依赖文件是否存在,如果不存在,则先按规定生成依赖文件,再生成指标文件。 例如: 指标文件是test,依赖所有的 ".o" 文件,如果没有检测到"main.o fun.o drv.o" 文件,则依据".o"的依赖规定, 让“main.c fun.c drv.c”文件生成对应的“ .o”文件, 之后再生成test文件 3.2 指标文件的更新任何一个依赖文件有更新了,或者依赖文件的工夫戳比指标文件新,则从新生成指标文件 以上是对Makefile基础知识的介绍,前面的文章将会联合例子,来介绍Makefile的具体用法。

March 1, 2023 · 1 min · jiezi

关于makefile:Makefile-学习一运行机制

你必须十分致力,能力看起来毫不费力! 微信搜寻公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言在 Go 语言开发中,咱们心愿可能标准代码格调,每个成员在提交时能够一键格式化,同时查看是否有语法错误;咱们心愿可能一键运行单测,生成单测报告;咱们心愿可能一键编译、打包、公布我的项目,这就须要应用到 Make。Make 有很多种,咱们罕用的就是 GUN Make,有了 Make,咱们将极大的进步我的项目开发、测试、公布的效率。 Make 最后是为 C、C++我的项目的编译、构建服务的,因而有很多为C、C++的个性,然而这些个性在 Go 开发中应用不到。毕竟每个人的工夫无限,咱们就只学习Go 开发中 Make 应用所必须的常识。Make 的规定都在 Makefile 文件编写上,咱们前面就一起来学习 Makefile 的编写吧! make 命令在 Windows 下不反对运行,须要在 Linux 或 Mac 环境下运行规定Makefile 的规定很简略,分为三个局部: target : prerequisites command ...target:指标,能够是一个文件,或者是一个标签 label prerequisites:targets 依赖的货色, 能够是文件,也能够依赖其余 target command:shell 命令(结尾是 Tab 键) 如果 prerequisites 比 target 要新,就会 执行 command 命令 (已存在的文件比不存在的文件新)如果 prerequisites 中存在其余 target,对该 target 反复第一条举个例子: hello: hello.go go build hello.go如果 hello 文件不存在,hello.go 必定比不存在的 hello 新,执行命令 go build hello.go ...

October 30, 2022 · 3 min · jiezi

关于makefile:翻译最好的makefile入门教程

入门为什么会存在 Makefile?Makefile 用于帮忙决定大型程序的哪些局部须要从新编译。在绝大多数状况下,编译 C 或 C++ 文件。其余语言通常有本人的工具,其用处与 Make 类似。当你须要一系列指令来运行取决于哪些文件已更改时,Make 也能够在编译之外应用。本教程将重点介绍 C/C++ 编译用例。 这是你能够应用 Make 构建的示例依赖关系图。如果任何文件的依赖项产生更改,则该文件将被从新编译: Make 有哪些代替计划?风行的 C/C++ 代替构建零碎是SCons、CMake、Bazel和Ninja。一些代码编辑器(如Microsoft Visual Studio)有本人的内置构建工具。对于 Java,有Ant、Maven和Gradle。Go 和 Rust 等其余语言有本人的构建工具。 Python、Ruby 和 Javascript 等解释型语言不须要相似于 Makefile。Makefiles 的指标是依据已更改的文件来编译须要编译的任何文件。然而当解释语言中的文件发生变化时,不须要从新编译任何货色。当程序运行时,将应用该文件的最新版本。 Make的版本和类型Make 有多种实现形式,但本指南的大部分内容都实用于你应用的任何版本。然而,它是专门为 GNU Make 编写的,它是 Linux 和 MacOS 上的规范实现。所有示例都实用于 Make 版本 3 和 4,除了一些深奥的差别之外,它们简直雷同。 运行示例要运行这些示例,你须要一个终端并装置“make”。对于每个示例,将内容放在一个名为 的文件Makefile中,而后在该目录中运行命令make。让咱们从最简略的 Makefile 开始: hello: echo "Hello, World"留神:Makefile必须应用TAB而不是空格缩进,否则make会失败。 这是运行上述示例的输入: $ makeecho "Hello, World"Hello, World而已!如果你有点困惑,这里有一个视频,介绍了这些步骤,并形容了 Makefile 的根本构造。 <iframe width="1131" height="703" src="https://www.youtube.com/embed/zeEMISsjO38" title="Beginner Makefile Tutorial" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ...

September 25, 2022 · 10 min · jiezi

关于makefile:彻底掌握Makefile二

彻底把握Makefile(二)前言在后面的文章彻底把握Makefile(一)当中,咱们简要的介绍了一些常见的makefile应用办法,在本篇文章当中咱们将持续介绍一些makefile当中的常见用法。 Makefile中的条件判断ifeq 和 ifneq咱们在写makefile的时候经常会有通过if语句进行判断的需要,比如说依据不同的文件设置不同的编译器等等。 cc=g++main: demo.c echo $(cc)ifeq ($(cc), gcc) echo $(cc) = 相等的语句执行了else echo $(cc) != 不相等的语句执行了endif下面的makeifle的执行后果如下: 在下面的makefile当中定义了一个变量cc,他的值为gcc。在下面的makefile当中ifeq示意如果后边的表达式成立的话,也就是$(cc)的值等于gcc那么就执行前面的语句,否则执行else前面的语句。依据下面makefile的执行后果来看,$(cc)和gcc不相等,因而和咱们的期待的后果是统一的。 咱们批改下面的makefile文件如下: cc=g++main: demo.c echo $(cc)ifneq ($(cc), gcc) echo $(cc) != gccelse echo $(cc) = gccendif执行下面的makefile文件输入的后果如下: 在下面的makefile当中ifneq的含意示意如果不相等,因为g++不等于gcc,因而这个满足条件,程序执行的后果满足条件。 对于make的输入问题,当makefile执行到echo $(cc) != gcc的时候,首先这条命令会被make输入,而后make会执行这条命令,而这条命令是输入g++ != gcc,因而才会有下面的输入。echo g++ != gcc,而执行这条命令还会输入g++ != gcc,看到这应该可能了解下面的makefile的输入后果了。 后面两个关键字的语法如下所示: ifeq (<arg1>, <arg2>)ifeq '<arg1>' '<arg2>'ifeq "<arg1>" "<arg2>"ifeq "<arg1>" '<arg2>'ifeq '<arg1>' "<arg2>"ifneq (<arg1>, <arg2>)ifneq '<arg1>' '<arg2>'ifneq "<arg1>" "<arg2>"ifneq "<arg1>" '<arg2>'ifneq '<arg1>' "<arg2>"ifdef 和 ifndef除了下面的两个关键字之外,make还给咱们提供了另外两个关键字ifdef和ifndef。 ...

September 23, 2022 · 2 min · jiezi