随笔 - 733  文章 - 2  评论 - 12  阅读 - 92万

Makefile学习

一 程序从源码到可执行文件的过程:参考编译的工作工程

    简单的单文件编译非常简单,通过GCC可以把“.c”变成“.o”文件然后可以直接运行;

    而复杂一点的程序都需要经过三步:

  

1 $ ./configure
2 $ make  
3 $ make install

 说明:

  • step1:通过autoconf工具进行配置,保存会生成configure的脚步配置文件(包含了编译环境所需的一切参数)。
  • step2:通过make工具操作configure文件会生成makefile文件(包含了头文件位置,相互调用依赖关系),然后经过头文件的预编译(只进行一次),预处理(宏替换),编译(.s汇编文件),汇编(.o目标文件)链接(将所调用的函数或所需的文件静态放到指定位置。最终成为完整的二进制文件.out文件),安装(将可执行文件保存在指定存储位置。)
  • make install:通过操作系统的连接(通过操作系统新可执行APP的信息:支持的扩展名和打开方式)类似Windows下的应用程序快捷方式。最后在经过打包生成安装包。

      静态链接和动态链接的区别:

  • 静态链接:静态的将所需资源进行替换,优点:完整,不会出现运行缺少文件现象,文件大;
  • 动态链接:运行时才加载所需资源库,可执行文件尺寸小的优点,但必须提供文件名,版本完全一致的文件于指定目录下,否则可执行程序会因缺失相关文件而不能运行。

二 细节 Makefile经典教程(掌握这些足够)  《跟我一起写Makefile》pdf

  注意:Makefile 中的命令,必须要以[Tab]键开始

       文件名:默认Makefile,次推荐的是makefile/GNUmakefile.自定义文件名也是可以的需要用make -f file.扩展名

       文件包含:-include <filename> 类似C的文件包含,前面加-表示如果找不到也不要报警。文件包含可以指定“-I”或“--include-dir”参数;环境变量MAKEFILE有类似文件包含的左右,如果出现古怪问题看是不是这个原因造成的。

       特殊通配符符号:

  • ~:“~/test”,这就表示当前用户的$HOME目录下的test目录。而“~hchen/test”则表示用户hchen的宿主目录下的test目录。
  • *:所有类似文件
  • %:%.c表示匹配0或者若干个字符。譬如在文件搜索用make的特殊变量VPATH = src:../headers或者是关键字vpath <pattern> <directories>
  • -M:C编译器的-M参数会自动为我们找出模块.C文件中依赖的所有头文件;如果是GNU的C/C++编译器则要改为-MM参数不然会将标准库文件也包含进来。

2.1伪目标:因为伪目标不能和工程中的文件名重复所以用.PHONY是为了告诉系统这是个伪目标,无论是否重名

 

  

.PHONY: clean
clean:
rm *.o temp

 

 

     

三命令:

   3.1 echo:显示要执行的命令。当@echo时不显示;-n/--just-print则只显示不执行命令;-s/--slient全面禁止命令的显示。

   3.2命令执行:

  1. 要让上一条命令的结果应用在下一条命令时,你应该将2个命令写在同一行,且中间使用分号分隔这两条命令。
  2. 忽略命令错误:make是逐条执行命令,当一个命令出错时会终止运行,此时有以下几种方法可以忽略错误保证继续执行:
  • 命令前加“-i/--ignore-errors”:这会影响全局所有命令
  • 命令前加“-”:
  • 命令前加“-k/--keep-going”:

      

 

  

 

posted on   杰瑞鼠  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示