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

实战Makefile前,该知道那些知识?

从例子说明,mkdir的出错并没有对其他命令产生影响,因为我只要目录存,所以mkdir出错不应该终止命令规则的运行。...“=”和“:=”的区别就在这里,“:=”只取第一次被赋值的值。 赋值符'?=': PARA = RICE PARA ?...系统自带变量: 系统自定义了一些变量,通常都是大学,比如CC,PWD,CLFAG等等,有些有默认值,有些没有,比如以下几种,如下 CPPFLAGS:预处理器需要的选项,如:-l CFLAGS:编译的时候使用的参数...-Wall -g -c LDFLAGS:链接库使用的选项-L -l 其中:默认值可以被修改,比如CC默认值是cc,但可以修改为gcc:CC=gcc 自动变量: Makefile的语法提供一些自动变量,...这些变量可以让我们更加快速的完成Makefile的编写,其中自动变量只能在规则中的命令使用,常用的自动变量如下: $@:规则中的目标 $的第一个依赖文件 $^:规则中的所有依赖文件 CC

48920

Makefile总结

大家好,又见面了,我是你们的朋友全栈君。...说到这里首先要知道一个工具make。 make是一个解释Makefile中指令的命令工具,常见的IDE都集成了这个工具。...目前centos 7.3 GNU的make版本是3.82 为什么要用Makefile 在做C/C++开发过程中,比如有如下文件: a.c b.c main.c 编译生成可执行二进制文件 gcc a.c...用=定义一个变量,并且赋值(等号两边可以加空格) 用+=追加字符串 例: A = src echo $(A) @echo $(A) ##只输出echo的结果,不显示执行的命令 可对上述的Makefile...: $@ 目标文件 $^ 依赖项列表 $< 依赖项列表第一项 通过make -p可以查看很多自定义的变量,如CC(默认值为cc),RM(默认值为rm -f) 可对上述的Makefile再进行修改: CC

97410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Nginx编译配置脚本篇(10)- Makefile相关脚本

    大家好,又见面了,我是你们的朋友全栈君。...相关的几个脚本文件,之前文章中讲到的那些没被使用的变量也会在这里被悉数使用,因为configure基本是在最末尾调用这些脚本的,所有之前没用到的有效信息理所当然得在这里使用。...,值为 空格+\+换行符+TAB 下面生成ngx_incs变量的那个echo会将CORE_INCS等变量的内容输出出来,输出的形式为一系列以空格为分隔的字符串 第一个sed正则语句的意思是匹配输出语句中除了第一个之外的全部字符串...auto/options里面根据我们的传入参数设置的,如果我们没有主动设置的话,则会在configure中设置为默认值/usr/local/nginx。...通过这十篇文章的学习,我们大致了解了Nginx各种类型的配置脚本所发挥的作用,当然这些脚本需要有一个文件来统一使用它们,也就是源代码根目录的configure文件,我将在下一篇文章中讲解configure

    2.3K40

    初识Linux · 有关makefile

    第二步则是先来一个实例代码: 然后,我们直接make一下,就可以创建一个test的可执行文件了,我们执行也是没有问题的: 其中,clean指令也是可以完成我们的预期操作的。...但是,前面我们介绍了一个指令叫做touch,是用来创建文件的,好像在这里没有啥用处,但是使用touch可以改变ACM时间: 所以我们想要重复编译也可以使用touch改变ACM时间再进行编译即可。...test修饰了 就可以重复编译了,此时clean也是可以重复执行的,因为clean是特殊的方法,后面也不用跟任何东西: 那么现在来深究原理部分,为什么我们直接make是执行的第一个指令呢?...此时啊,学到这里,不免会觉得我每次使用指令都要给我打印出来,一点神秘感都没有,能不能不打印呢?...所以@是只能应用一个指令,不是多行的,此时对echo@一下就可以了: 这里还有一个有意思的点是,makefile里面的注释是#,并且允许变量的存在,虽然说是变量,但是实际上就是宏了: 执行的操作实际上就是替换

    12410

    makefile从入门到放弃——博主吐血整理的笔记

    大家好,又见面了,我是你们的朋友全栈君。 想要成为专业程序员,mekefile必须懂 !尤其是在Linux下进行软件编译,makefile就不得不自己写。...执行make命令时会发现提示目标文件已经是最新的了,将不被不执行!如果我想让makefile中某个命令永远被执行。...创建和使用变量: 变量的类型 预定义变量: 变量名 变量含义 – AR 库文件维护程序名称,默认为ar.AS汇编程序名称,默认值为as。 – CC C编译器的名称,默认为cc。...makefile文件中的特殊变量VPATH就是完成这么一个功能,如果没有指明这个变量,make只会在当前目录中去寻找依赖文件和目标文件。...当使用 make 的选项 “-C” 的时候,命令就会进入指定的目录中,然后此变量就会被重新赋值。总之,如果在 Makefile 中没有对此变量进行显式的赋值操作,那么它就表示 make 的工作目录。

    1.7K20

    Golang 中的微服务-第二部分-Docker和go-micro

    我们在这里增加了两个步骤,我想详细解释一下。首先,我们正在构建我们的二进制文件。你会注意到在运行命令 之前,设置了两个环境变量。...句号表示一个目录路径,在这里我们只是希望构建过程在当前目录中查找。 我将在我们的 Makefile 中添加一个新条目: 在这里,我们运行 Docker 镜像,并暴露 50051 端口。...每个服务都有一个名字或编号分配给它。 因此,即使可能有新的 IP 地址或主机地址,只要服务名称保持不变,您就不需要从其他服务更新对此服务的调用。...是一个环境变量标志,它允许你将环境变量传递到你的 Docker 容器中。 每个变量必须有一个标志,例如 等。 现在如果你运行 ,您将拥有一个 Dockerised 服务,并具有服务发现功能。...我想在这里纠正一下,在我的接口名前面加上 Java 和 C# 等语言的约定,但 Go 并没有真正鼓励这一点,因为 Go 把接口当作一等公民。

    1.5K50

    6_Makefile与GCC

    一个错误是指第10行prntf之前缺少分号。两个警告是指第7行和第8行的变量没有使用。...说明,赋值符“=”,可以借助另外一个变量,可以将变量的真实值推到后面去定义。也就是变量的真实值取决于它所引用的变量的最后一次有效值。 ​ 其实可以理解为在C语言中,定义一个指针变量指向一个变量的地址。...“=”和“:=”的区别就在这里,“:=”只取第一次被赋值的值。 6.5.2.3 赋值符‘?=’ ​ 我们两个Makefile来说明赋值符‘?=’的用法。...6.5.2 系统自带变量 ​ 系统自定义了一些变量,通常都是大写,比如CC,PWD,CLFAG等等,有些有默认值,有些没有,比如以下几种,如下: ​ 1)CPPFLAGS:预处理器需要的选项,如:-l ​...为什么clean下的命令没有被执行?这是因为Makefile中定义的只执行命令的目标与工作目录下的实际文件出现名字冲突。

    3.6K10

    什么是makefile(3)

    继续(2)的内容: 六、另类风格的makefile 即然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题...这是一个“修养”(呵呵,还记得我的《编程修养》吗)。...Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。...但是在这里我还是建议不要使用这个环境变量,因为只要这个变量一被定义,那么当你使用make时,所有的Makefile都会受到它的影响,这绝不是你想看到的。...在这里提这个事,只是为了告诉大家,也许有时候你的Makefile出现了怪事,那么你可以看看当前环境中有没有定义这个变量。

    57620

    自动化构建-makeMakefile 【Linux基础开发工具】

    如果目标文件的更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译并更新目标文件。 默认情况下Makefile的第一个目标为终极目标。...因此,通过在Makefile中设置all作为默认目标规则,你可以简化构建过程,只需运行make命令即可执行整个编译过程,无需显式指定目标 三、变量 符号表示取变量的值,当变量名多于一个字符时,使用"(...=” 表示如果该变量没有被赋值, 赋值予等号后面的值。 VIR ?= new_value 如果VIR在之前没有被赋值,那么VIR的值就为new_value。...= new_value 这种情况下,VIR的值就是old_value 4、"+="和写代码是一样的, 表示将符号后面的值添加到前面的变量上 五、预定义变量 CC:c编译器的名称,默认值为cc。...make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

    13110

    linux内核编程_linux内核是什么

    调度控制系统中的多个进程对CPU 的访问,使得多个进程能在CPU 中微观串行,宏观并行地执行。 进程调度为什么很重要?...ext2 目录下的Makefile文件的内容决定。...如果用户不设置对应的选项,配置选项的值就是默认值。 任意多个默认值情况下,如何确定哪个配置选项的默认值是有效的? 存在任意多个默认值情况下,只有第一个被定义的值是可用的。...char data[0]仅仅意味着程序中通过var_data 结构体实例的data[index]成员可以访问len 之后的第index 个地址,它并没有为data[]数组分配内存,因此sizeof(structvar_data...aligned属性用于变量、结构体或联合体,指定变量、结构体或联合体的对界方式,以字节为单位, packed属性作用于变量和类型,用于变量或结构体成员时表示使用最小可能的对界,用于枚举、结构体或联合体类型时表示该类型使用最小的内存

    18.9K31

    java的局部变量和全局变量_java全局变量和局部变量

    大家好,又见面了,我是你们的朋友全栈君。 变量的初始化问题 我们先来看一个例子,最近在知乎看到的帖子。...最上面部分代码,将 a 变量作为类的成员变量,当我们创建对象的时候,Java 虚拟机会在系统的堆 (heap)区域申请一块内存区域来存放类的数据,在这里成员变量就是类的数据,这个时候JVM为加载的类要分配内存啦...成员变量作为类的数据是会随着类的加载在堆中分配内存,注意了,JVM 在申请内存时自动给它们赋了初值。这里附上下面一个堆栈简单示意图,   至于默认给类的成员变量赋初值有什么机理吗?...我们可以想到类都有一个默认的构造方法的。(因为我们没有给出显式的构造方法)我们创建对象的时候实际上是调用了默认的构造方法的,会给成员变量赋一个默认的初始值,这样在打印输出的时候才会有值输出而不报错。...(ps: static 修饰的成员变量不用创建对象也可以哦)   最后套用《Thinking in Java》作者的话: 编译器当然可以为局部变量附一个默认值,但是未初始化的局部变量更有可能是程序员的疏忽

    1.7K20

    qmake手册(Qt5.9.3)

    大家好,又见面了,我是你们的朋友全栈君。...如果没有在项目文件中声明,那么qmake假定应该建立一个应用程序,并为此目的生成一个合适的Makefile(或等价的文件)。...例如,如果你没有任何额外的INCLUDEPATH,那么你不需要指定任何。 qmake将添加必要的默认值。...典型的使用模式是将一个值列表分配给一个变量,并根据各种测试的结果附加更多的值。由于qmake使用默认值定义了某些变量,因此有时需要使用去除( – =)运算符来过滤不需要的值。...您可以为模式指定以下选项: blob会将文件的全部内容作为一个值返回 行将每行作为单独的值返回(没有行尾) true(默认值)和false返回文件内容作为单独的值,按照qmake值列表分割规则分割(如在变量赋值中

    5.8K20

    C++惯用法之消除垃圾收集器-资源获取即初始化方法(RAII)

    静态变量是嵌入在源文件中的常数,因为它们有已知的大小并且从不改变,所以它们并不那么有趣。自动分配可以被认为是堆栈分配——当一个词法块进入时分配空间,当该块退出时释放空间。它最重要的特征与此直接相关。...在C99之前,自动分配的变量需要在编译时知道它们的大小。这意味着任何字符串、列表、映射以及从这些派生的任何结构都必须存在于堆中的动态内存中。...双重删除:尝试两次删除一个对象。 通常,范围变量是首选。但是,RAII可以用作new和delete的替代方法,以使对象独立于其范围而存在。...这种技术包括将指针分配到在堆上分配的对象,并将其放在句柄/管理器对象中。后者具有一个析构函数,将负责销毁该对象。...RAII是一种很有前途的模式,但由于没有一些奇怪的解决方法,它根本无法用于堆分配的对象,因此在C ++中会受到影响。

    89920

    深度刨析makefile

    为什么要有 makefile 我们在学习 Linux 的时候,一般都是直接通过 gcc 对源文件进行编译的,我们可以通过指定 gcc 的参数来指定生成什么样的文件、使用哪个库、在哪个路径搜索等等。...default 如果 variable 是一个默认的定义,比如说 CC 这个变量 environment 如果 variable 是一个环境变量并且当Makefile被执行的时候, -e 参数没有被打开...,默认命令是 ctangle RM 删除文件命令,默认命令是 rm –f ② 代表命令参数的隐含变量 这些隐含变量将作为上面代表命令的隐含变量的参数,并且变量的默认值为空,也就是说,如果不指定的话,相当于没有加命令参数...,根据我们上面介绍的隐含变量表,make 默认使用的编译命令是 cc (CC 变量的默认值是 cc),如果我们把变量 (CC) 重定义成 g++,在使用 make 编译的时候就会使用 g++ 编译程序。...在这里,因为最开始没有 .c 文件,而 .o 文件的生成依赖 .c 文件,所以 make 会推导生成 .c 文件的规则,这时就通过当前已有的 .y 文件和 Yacc C 隐含规则来生成 .c 文件,因此

    13110

    【Linux】--- Linux编译器-gccg++、调试器-gdb、项目自动化构建工具-makeMakefile 使用

    在1940-1950年代,程序员开发一种新语言(汇编语言),它为每个操作码分配一个简单名字,叫“助记符”,助记符后面紧跟数据,形成完整指令。...那为什么不直接将c语言转为二进制目标文件呢?因为前人已经写好了汇编的编译器,我们只需站在巨人的肩膀上,再将高级语言转为较简单的汇编代码即可。 那么如何形成第一个汇编写的汇编编译器呢?...make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。...在makefile中可以定义变量,当makefile被执行时,其中的变量都会被扩展到相应的引用位置上。4. 通常使用 $(var) 表示引用变量文件指示。...默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件 3.3 项目清理 工程是需要被清理的 像clean这种,没有被第一个目标文件直接或间接关联

    43020

    深入掌握 Makefile 与 Make 工具:高效管理自动化编译的核心原理和最佳实践

    变量:makefile 中定义的变量,允许复用和动态设置。...为什么使用 .PHONY .PHONY 可以避免文件名和目标名冲突的问题。...$的自动化变量,代表第一个依赖文件,在这里是 .c 文件。 $@ 是目标文件(在这里是 .o 文件)的名称。 这样,不需要为每个 .c 文件写一条规则。...手动触发 有时可能需要强制重新编译,即使文件没有变化,这可以通过以下方式实现: make clean:运行一个清理目标,删除所有中间文件和可执行程序,然后执行 make 重新构建整个项目。...Makefile 中的配置 有时在 makefile 中的配置也会影响重新编译的条件,例如使用变量、条件语句和模式规则等。 总结 需要重新编译:当源文件、依赖文件发生变化,或者手动强制重新编译时。

    59750

    CMake vs Make对比

    这个makefile列出了每个非源文件以及如何从其他文件中计算它。编写程序时,应该为其编写一个makefile,以便可以使用“Make”来构建和安装程序。简单的东西!...每个项目都有自己的规则和细微差别,每当你有一个新的合作者,它都会变得非常痛苦。这就是我们有这个makefile的原因。构建过程的细节实际上记录在您提供的makefile中。...因此,没有明确指定像$(CC)这样的命令。 为了编码真正想要血液细节的垃圾,请继续阅读。如果你不是所有的,你可以跳到下一节。...但是,CMake根据您的系统配置做出合理的默认选项。其次,您在选定的构建系统中执行实际构建。 我们将在这里跳入GNU构建系统领域。如果你不熟悉,这一段可能看起来像是jibber-jabber给你。...好的,现在我给了法定的警告,我们继续吧!我们可以比较CMake和Autotools。当我们这样做时,我们可以看到Make的缺点,它们构成了Autotools创建的原因。

    4.1K31
    领券