
Makefile
文章平均质量分 71
makefile学习
Splaying
Studying
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Makefile:make install的实现(十一)
这个脚本的意思是将可执行文件的执行指令写入到08_main_start启动脚本中,并且把输出结果重定向到08_main.log日志文件中,并且在后台运行(不占用bash),在输出一些提示。:将08_main_start启动脚本软连接到/usr/local/bin下,使得可以全局执行,下同。:生成可执行目标,这里的可执行目标比较简单,这也是第一个目标,也就是make默认执行的入口。:这是make clean的执行目标,主要就是清除上面生成的这些文件和软链接的环境变量。:否则就开始进行文件的一些操作和连接。原创 2024-04-05 11:43:51 · 2302 阅读 · 0 评论 -
Makefile:条件判断、循环、自定义函数(十)
Makefile中提供了自定义函数,但并非是真正的函数。本质是将多行命令放在了外面,使用时将其包含进来调用格式:$(call 函数名)# 自定义函数并不是真正的函数,本质上是多行命令放在了外面,使用时将其包含进来a:=123b:=$(a)endefa:=456show:a:=789# 输出func789 123func789 123函数的传参问题,函数可以传参,但是没有返回值与C/C++的main参数一样,0号参数是本身,1号参数开始才是传入的参数。原创 2024-04-03 22:50:16 · 3043 阅读 · 0 评论 -
Makefile:调用shell脚本和嵌套调用多项目编译(九)
【代码】Makefile:调用shell脚本和嵌套调用多项目编译(九)原创 2024-04-03 21:23:44 · 1080 阅读 · 0 评论 -
Makefile:通用部分头文件与条件判断(八)
首先举个例子看看为什么需要这个东西,例如在一个文件夹下有两个项目,两个项目都需要编写makefile编译,此时可以使用公共头文件。对比上面两个makefile,其主要的不同就是一个项目下是.cpp文件,一个是.c文件,而下面编译的代码几乎相同。:可以理解为引用,可以在makefile中写一个a=$(a)的指令就会报出自身引用自身的错误。:可以理解为赋值,这个值只与当前行之前的变量值有关,先把值拿出来赋值好,后面在修改与其无关。而=被认为是引用,因此只有最后才知道值,a一旦修改b引用a的值也会被修改。原创 2024-04-02 21:06:53 · 486 阅读 · 0 评论 -
Makefile:静态库的制作与使用(七)
静态链接库:会把库中的代码编译到二进制文件中,当程序编译完成后,该库文件可以删除,而动态库不幸,动态链接库必须与程序同时部署,还要保证程序能加载得到库文件。首先准备三组文件add.h/add.cpp、sub.h/sub.cpp、mul.h/mul.cpp分别定义和实现整数的加减乘法。main目标:利用静态库和静态库包含的.cpp对应的头文件的位置进行编译生成一个可执行的二进制文件main。静态库的原理就是将所有的静态库代码原封不动的拷贝一份到其所需要的地方,因此制作出来的可执行文件体积较大。原创 2024-03-31 23:12:27 · 1276 阅读 · 0 评论 -
Makefile:动态库的编译链接与使用(六)
首先准备一个main.cpp引入SoTest.h头文件,对SoTest进行继承并且重写几个函数。不管上面那种写法,最后lld main都能看到对应的libSoTest.so的路径在哪。动态链接库:不会把代码编译到二进制文件中,而是运行时才去加载,所以只需要维护一个地址。动态链接库文件的好处是程序和库文件分离,可以分别发行,库文件可以被多处共享。首先生成一个SoTest.h、SoTest.cpp分别存放类声明和定义。此时当前目录下会生成一个 libSoTest.so的文件表示动态库。使用下面的指令进行编译。原创 2024-03-31 19:22:43 · 2302 阅读 · 0 评论 -
Makefile:运行流程解析(五)
当输入make并且进行回车时,首先回去检查对应的目录下是否有Makefile或者makefile文件如果有文件那么执行指定的目标(没有指定目标默认第一个目标为最终目标),如果没有对应的文件,报错执行结束对于最终的目标首选检查是否存在依赖,不存在依赖直接编译下面的命令如果存在对应的依赖,递归的把所有的依赖都执行完最后没有依赖或所有的依赖都已经解析完毕,执行最终目标下的命令,然后结束运行。原创 2024-03-30 20:47:48 · 348 阅读 · 0 评论 -
Makefile:模式匹配与伪目标(四)
因此makefile中有没有一种方法可以引入类似于模糊匹配的东西来进行优化:答案是有的,叫做模式匹配。动态模式匹配:%.目标:%.依赖,目标和依赖相同的部分可以用%来通配。对于下面这一份makefile代码,我们可以发现待优化的地方非常多。对于上面的代码我们可以进行优化成下面这个样子。这样就可以优化一个一个文件的编译。文件,生成对应的目标。原创 2024-03-30 11:58:19 · 583 阅读 · 0 评论 -
Makefile:变量和常量的使用(三)
虽然makefile内置了一些系统变量,但makefile也支持自定义变量例如定义一个myargs表示我们自定义的变量,改变了的值是-Wall和-g-Wall:表示make编译过程中输出所有的警告信息(Warning all)-g:表示加入gdb调试信息这样写的好处是当在多出需要这个两个操作时直接引入这个变量即可${变量名} / $(变量名)# 定义一个自定义变量。原创 2024-03-30 11:20:03 · 461 阅读 · 0 评论 -
Makefile:命令的使用与编译过程解析(二)
这里需要注意任何命令都是向前兼容的,例如直接使用-S指令表示预处理 + 编译,而使用-c表示预处理 + 编译 + 汇编!make通过观察文件有没有新的改动,如果没有新的改动将不会重新编译,如果有改动只重新编译改动的文件!可以通过修改其中一个文件的代码来测试,例如把add.cpp中的+号加法改成*号乘法。gcc、g++、c++编译执行的流程大致分为四个步骤:预处理、编译、汇编、连接。可以看到最后的输出结果是正确的,通过联合编译生成最后我们需要的结果。原创 2024-03-29 23:13:14 · 453 阅读 · 0 评论 -
Makefile:相关概念与Hello World开始(一)
Cmake并不能直接构建出最终的软件,而是产生标准的构建档(如Unix的Makefile 或 Windows下的projects/workspaces),然后再依赖一般的构建方式使用。Makefile定义:一个工程中的源文件不计其数,其按类型、功能、模块、分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译、哪些文件需要后编译,哪些文件需要重新编译,甚至其他更复杂的功能操作。依赖:指执行当前目标索要依赖的选项,包括其他目标,某个具体文件或库等,一个目标可以有0个或多个依赖。原创 2024-03-29 22:23:30 · 910 阅读 · 0 评论