Makefile
文章平均质量分 73
学习Makefile的笔记
小马同志( ̄^ ̄)ゞ
这个作者很懒,什么都没留下…
展开
-
Makefile学习笔记20|u-boot顶层Makefile06
在 Makefile 中,空规则用于作为依赖,以确保直接或间接依赖于该规则的目标每次都会被执行,即使它们没有文件修改也是如此。该变量被视为 Makefile 的一个集中方式来声明这些 phony 目标,以确保不论是否存在与目标同名的文件,目标都会被执行。这些规则和变量定义是构建系统的一部分,确保 Makefile 能够适应不同的构建环境和工具链配置,同时保持构建过程的灵活性和可维护性。.PHONY 是一个特殊的内置目标,用于告诉 Make 哪些目标是“phony”(伪目标),即不与文件相关联的目标。原创 2024-05-29 09:19:13 · 879 阅读 · 0 评论 -
Makefile学习笔记19|u-boot顶层Makefile05
python3这段代码很平凡,就是定义常见构建工具变量。首先尝试使用 GNU 的 ld.bfd,如果找不到,回落到标准的 ld。BFD (Binary File Descriptor) 是 ld 的一个后端,通常提供更多的功能和选项。2这些变量定义了编译器和汇编器的标志,用于 C 和汇编语言文件。原创 2024-05-28 09:08:56 · 974 阅读 · 0 评论 -
Makefile学习笔记18|u-boot顶层Makefile04
定义 scripts/Kbuild.include 为一个空规则。在这种情况下,随后紧跟分号的目标意味着 Make 不应该尝试去构建这个文件——即使它不存在或者需要更新。这通常被用来防止含有 Makefile 规则的文件在每次 make 命令运行时被重新创建或下载。原创 2024-05-27 08:00:00 · 315 阅读 · 0 评论 -
Makefile学习笔记17|u-boot顶层Makefile03
在某些情况下,这些消息可能会干扰输出的简洁性,特别是当你在集成开发环境(IDE)或者文本编辑器中使用 make 时,这些信息可能会让错误信息和编譯警告的解析变得更加复杂。例如,编译为 ARM 设备制作的 U-Boot 时,即使你可能在 x86 架构的 Linux 系统上进行操作,构建系统也需要知道这些信息,以正确使用交叉编译器和其他工具。总体来看,这一段代码是构建系统中设置编译环境的关键部分,它确保了 Makefile 可以正确地识别源代码和输出目录,进而在正确的位置执行编译和链接操作。原创 2024-05-26 11:18:59 · 487 阅读 · 0 评论 -
Makefile学习笔记16|u-boot顶层Makefile02
两者一起使用可以确保 Makefile 的稳定性,并为整个构建过程提供可靠和一致的输出,特别是在复杂或具有高度自定义性的构建系统中,这种严格控制可能是必要的。基本上,这种功能允许你在构建内核时保持源码目录的干净,所有编译生成的文件(对象文件、配置文件和最终的内核镜像等)都将被放置在一个单独的目录。在定义 .PHONY 的时候,通常会把所有不会生成同名输出文件的目标都定义为 .PHONY,这样可以防止 Make 错误地跳过这些目标,因为 Make 的默认行为是只构建那些比它们的依赖文件更新的目标。原创 2024-05-24 14:45:09 · 413 阅读 · 0 评论 -
Makefile学习笔记15|u-boot顶层Makefile01
为了避免这些依赖,通常在 Makefile 或构建脚本中设置特定的环境变量,使得这些操作更可预测,具有一致性,避免构建过程中由于不同的本地化设置引起的问题。当我们确保 LC_COLLATE 和 LC_NUMERIC 是 C(或 POSIX,它们是等效的)时,您可以让构建过程在所有环境中提供一致的行为,避免由于不同的语言或地区设置而造成的问题。例如,如果你的开发系统是基于 x86 架构的,而你的目标系统是基于 ARM 架构的,那么你需要使用 ARM 架构的交叉编译器来编译你的代码。达瓦里希( ̄^ ̄)ゞ。原创 2024-05-23 17:00:46 · 803 阅读 · 0 评论 -
Makefile学习笔记14|u-boot顶层Makefile00
希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。原创 2024-05-23 16:15:25 · 306 阅读 · 0 评论 -
Makefile学习笔记13|使用makefile生成后台启动和停止的脚本
Makefile学习笔记13|使用makefile生成后台启动和停止的脚本 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录 本节将为上一节的makefile编写两个脚本,分别是后台启动脚本和停止脚本,并且将这两个脚本也拷贝到/usr/bin/目录下。后台启动脚本 我们给后台启动脚本命名为start_test_install。其内容就是执行命令nohup test_install 3 &,其中的nohup是不打印输出信息的意思。# test_in原创 2022-05-04 14:48:52 · 828 阅读 · 2 评论 -
Makefile学习笔记12|自定义makefile函数调用实现中的install
Makefile学习笔记12|自定义makefile函数调用实现中的install 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录安装 创建目录:~/make/src/test_install。在此路径下创建文件:test_install.cpp。make test_install后再./test_install,运行无误后进行下一步。后面要把test_install安装进/usr/bin/。#include <iostream>#inclu原创 2022-05-01 18:51:47 · 1619 阅读 · 0 评论 -
Makefile学习笔记11|嵌套make同时编译和清理多项目
Makefile学习笔记11|嵌套make同时编译和清理多项目 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录 我们前面都是逐一编译每一个项目,但是现实场景当中我们一个大项目中可能有多个分项目,比如说服务端与客户端。如果我们还要逐一编译每一个分项目,那将十分麻烦,还有可能遗漏。所以我们需要一个统一的总的makefile来编译整个大项目。 项目结构请参照Makefile学习笔记06|编译动态链接库。我们在~/make/src/下创建一个makefile。#原创 2022-05-01 10:48:40 · 302 阅读 · 0 评论 -
Makefile学习笔记10|makefile获取shell结果实现目录创建判断
Makefile学习笔记10|makefile获取shell结果实现目录创建判断 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录 本节研究一下在makefile中如何执行shell脚本并得到其运行结果,进而改写、优化前面的makefile。可以将前面默认TARGET:=test改成默认TARGET为目录的名称。通过前面的学习,我们知道makefile分为目标、依赖、代码三个部分。代码部分就可以执行shell脚本。本节的侧重点是如何得到shell脚本的执行结果。原创 2022-04-30 14:24:41 · 1370 阅读 · 0 评论 -
Makefile学习笔记09|include外部文件定义统一的makefile头文件
Makefile学习笔记09|include外部文件定义统一的makefile头文件 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录 本节我们解决一个问题。前面我们写了很多makefile,但是里面涉及一个问题,就是多数项目的结构都是一样的。如果我们可以统一出一个makefile头文件,供所有的makefile引用,就可以降低项目维护的成本。以后开发的项目只需要移植现成的makefile,修改一些参数即可,这样可以有效提高开发效率。下面就学习如何导入外部mak原创 2022-04-30 12:49:00 · 1230 阅读 · 0 评论 -
Makefile学习笔记08|makefile函数使用wildcard自动添加
Makefile学习笔记08|makefile函数使用wildcard自动添加 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录函数简介 我们先从makefile自带的函数开始学习。wildcard展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表SRC=$(wildcard *.cpp *.cc)patsubst格式:$(patsubst,,)名称:模式字符串替换函数——patsubst。TMP=(patsubst(patsu原创 2022-04-29 11:28:02 · 896 阅读 · 0 评论 -
Makefile学习笔记目录
Makefile学习笔记目录Makefile学习笔记01|前言Makefile学习笔记02|动手编写第一个MakefileMakefile学习笔记03|g++编译的四个步骤Markfile学习笔记04|Makefile运行流程与变量Makefile学习笔记05|自动推导与伪目标Makefile学习笔记06|编译动态链接库Makefile学习笔记07|编译静态库并通过ifeq语句...原创 2022-04-27 10:46:32 · 546 阅读 · 0 评论 -
Makefile学习笔记07|编译静态库并通过ifeq语句
Makefile学习笔记07|编译静态库并通过ifeq语句 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 本篇与上一篇有较多联系,有兴趣的可以先看上一篇。编译静态链接库 xcom这个子项目模拟关于通讯的库,要编译成静态链接库。编译静态库一定要加选项-r,c和v可以不加。// xcom.h#ifndef XCOM_H#define XCOM_Hclass XCom{public: XCom();};#endif// xcom.cpp#includ原创 2022-04-27 10:32:08 · 1498 阅读 · 0 评论 -
Makefile学习笔记06|编译动态链接库
Makefile学习笔记06|编译动态链接库 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 动态链接库,就是程序在运行的时候再去加载的代码。因此,在编译时也与一般的代码不同。编译动态链接库涉及到库文件的路径和加载。编译选项-fPIC-shared g++ -shared -fPIC mylib.cpp -o libmylib.so g++ test.cpp -lmylib -L/root/cpp #!/bin/sh LD_LIBRARY_PATH=./;原创 2022-04-26 11:42:34 · 4375 阅读 · 0 评论 -
Makefile学习笔记05|自动推导与伪目标
Makefile学习笔记05|自动推导与伪目标自动推导 自动推导涉及到.o文件。开始之前需要先删除掉之前产生的.o文件和可执行文件first_make。rm *.o first_make 再修改一下makefile文件。# ~/make/src/first_make/makefile# $^ 依赖 不重复# $@ 目标# @ 不显示命令执行# - 发生错误后继续向后执行TARGET=first_makeLIBS=-lpthread# 修改一下上一节的makefile文件,把原创 2022-04-24 12:45:00 · 324 阅读 · 0 评论 -
Makefile学习笔记04|Makefile运行流程与变量
Markfile学习笔记04|Makefile运行流程与变量 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。Makefile运行流程make和makefilemakefile文件主要包含了5部分内容:显式规则.说明了如何生成一个或多个目标文件。由makefile文件的创作者指出,包括要生成的文件、文件的依赖文件、生成的命令。隐式规则。由于makefile有自动推导的功能,所以隐式的规则可以比较粗糙地简略书写makefile文件,这是由make所支持的。变量定义。原创 2022-04-22 00:10:49 · 513 阅读 · 0 评论 -
Makefile学习笔记03|g++编译的四个步骤
Makefile学习笔记03|g++编译的四个步骤 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。介绍 GCC(G++)编译的四个步骤分别是预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。 我们在配置项目时,首先要了解一个项目是如何一步步被编译出来的,是怎样从源码编译出可执行程序,最终又是如何被执行的。只有理清了其中的关系,我们才能快速定位问题,从而解决在编译中出现的问题。 g++编译的四个步骤原创 2022-04-21 12:50:08 · 2398 阅读 · 0 评论 -
Makefile学习笔记02|动手编写第一个Makefile
Makefile学习笔记02|动手编写第一个Makefile 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。文件准备~/make/src/first_make/first_make.cpp//first_make.cpp#include <iostream>using namespace std;int main(int argc, char *argv[]){ cout <<"test make "<<endl;原创 2022-04-20 00:34:02 · 612 阅读 · 0 评论 -
Makefile学习笔记01|前言
Makefile学习笔记01|前言学习Makefile的目的Linux下C/C++编程中广泛应用Makefile。编译移植开源项目时,大部分开源项目都基于Makefile,学会Makefile才能够解决编译过程中出现的问题。手写Makefile太过于繁琐,自动生成的Makefile不易于配置。因此,学习编写自动化Makefile,将来的新项目只需要include之前的Makefile头文件。学习Makefile可以理解大型项目如何分步编译。学习Makefile的人群在linux环境下编程原创 2022-04-18 21:42:41 · 873 阅读 · 0 评论