一些通用的Makefile文件模板

💡 原文中文,约4700字,阅读约需12分钟。
📝

内容提要

本文介绍了三个Makefile模板,用于编译可执行文件、静态库和动态库。模板包含编译选项、源文件、头文件和库文件的设置,方便编译和链接程序。

🔎

延伸解读

三个模板的核心差异

三个Makefile模板结构相似,但关键区别在于编译和链接方式。可执行文件模板使用gcc直接链接目标文件并输出到output目录;静态库模板改用ar命令打包.o文件,生成libxxx.a;动态库模板则在编译和链接时都加入-fPIC -shared选项,生成libxxx.so。理解这些差异有助于根据项目需求选择合适的模板。

动态库运行时路径问题

文章特别提醒,如果执行程序时提示找不到动态库(如libfun_so.so),需要将动态库拷贝到/lib或/usr/lib目录下。这是因为系统执行程序时默认从这些路径搜索动态库。若不想拷贝,也可通过设置LD_LIBRARY_PATH环境变量指定库路径,但文章未提及此方法,读者需自行了解。

模板的通用性与调整

文章提供的Makefile模板适用于大多数Linux项目,但并非万能。例如源文件路径、头文件路径、库文件名称和路径等都需要根据实际项目结构修改。模板中使用了wildcard和patsubst等函数自动获取源文件和生成目标文件,减少了手动维护的工作量,但若项目结构复杂,可能仍需调整。

交叉编译的注意事项

文章提到,为ARM架构Linux编写程序时需使用交叉编译器,如arm-linux-gcc,不同CPU厂商可能提供定制名称(如Hisilicon的arm-hisiv300-linux-gcc)。在Makefile中只需修改CC变量即可切换编译器。但交叉编译时,链接的库文件也必须是目标架构的版本,否则会导致链接失败。

❓

Q&A

Makefile是什么,它的作用是什么?

Makefile是Linux下实现一键编译功能的编译脚本,主要用于自动化编译和链接程序。

如何编写一个用于编译可执行文件的Makefile?

编写可执行文件的Makefile需要设置版本、编译器、源文件、头文件、库文件等,并定义编译和链接规则。

静态库和动态库的Makefile有什么区别?

静态库的Makefile使用ar命令生成.lib文件,而动态库的Makefile需要添加-fPIC和-shared选项生成.so文件。

在Linux中如何使用Makefile编译程序?

在Linux中,可以通过命令'make'来执行Makefile中的编译规则,从而编译程序。

Makefile中如何指定源文件和头文件?

可以使用wildcard函数获取源文件路径,并通过INCLUDES变量指定头文件的路径。

Makefile中如何清除编译产生的临时文件?

可以定义一个clean规则,使用命令'rm -rf'删除编译产生的临时文件和目标文件。

🏷️

标签

➡️

继续阅读