linux下makefile文件编写

chatgpt/2023/9/26 13:24:50

在linux环境下编译项目时,我们可能会连接很多头文件和动态库。这会给我们造成很多的麻烦。这时我们使用makefile文件会极大地简便我们项目的编译过程。下面是一些步骤。

1.创建makefile文件

 vi makefile

2.编辑makefile文件,样例如下

LIBS:=hcnetsdk AudioRender
LIB_DIRS:=./Bin  ./lib
includePath=./include
main:main.og++ -o main main.o $(addprefix -L,$(LIB_DIRS)) $(addprefix -l,$(LIBS))main.o:main.cppg++ -c main.cpp -I$(includePath)
.PHONY:cleanclean:rm -rf *.o main

其中LIBS是项目链接的具体动态库,我们将hcnetsdk AudioRender这两个动态库名称赋值给这个值。
LIB_DIRS是上面动态库的具体目录,我们将./Bin ./lib这两个目录赋给这个值;
includePath是项目的头文件名。

下面就是具体的编译过程,比较基础,main是我们的目标文件名,由mian.o目标文件连接动态库生成。
mian.o由main.cpp生成。

3.用到的函数

3.1 addprefix

addprefix是GNU Make中的一个函数,用于将指定的前缀加到一个或多个字符串中的每个元素。它的语法如下:

$(addprefix PREFIX, NAMES...)

其中,PREFIX是要添加的前缀,NAMES…是一个或多个待添加前缀的字符串。
addprefix函数会将PREFIX添加到NAMES…中的每个元素之前,并返回结果。例如:

NAMES := file1 file2 file3
new_names := $(addprefix prefix_, $(NAMES))

在上述示例中,NAMES是一个包含三个字符串的变量,new_names是使用addprefix函数将前缀prefix_添加到每个元素之前的结果。new_names将会是prefix_file1 prefix_file2 prefix_file3。
在关联动态库的示例中,addprefix函数用来将-L和-l前缀加到每个库文件路径和库名称之前,以便正确指定库文件的路径和名称。

3.2 .PHONY:clean

.PHONY是一个特殊的目标(伪目标),在Makefile中使用它可以指定一些不对应实际文件的操作或标记某个目标为伪目标而避免与同名文件冲突。
在例子中,.PHONY: clean表示clean是一个伪目标。通常,clean是被用来执行清理操作,例如删除临时文件、清空编译生成的文件等。方便起见,可以像下面这样定义clean目标:

.PHONY: clean
clean:rm -f *.o myapp

在上面的示例中,clean目标通过执行rm -f命令来删除所有的.o文件和myapp文件。
由于.PHONY目标不与实际的文件关联,所以即使存在同名的文件或目录,使用make clean命令时也能够正常执行清理操作,而不会被当作一个构建目标处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314261.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

BMI指数计算小工具Java

现在越来越多的人关注健康,关注身材管理,不妨做个小工具,计算自己的BMI,给自己制定合理的健身或减肥计划,享受健康生活!!!BMI的计算标准从网上找的,不知道是否准确&#…

Elasticsearch和MySQL之间的数据同步问题

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch和MySQL之间的数据同步问题。 如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。 小威在…

Elasticsearch零基础实战

问题点 es磁盘量超80%,es会锁住,看看如何解决 相关资源 测试环境kibana地址:http://10.7.176.72:5601/app/home#/ 10.7.176.72-74 es装配信息 安装路径:/home/elas/es-8.7.0 数据路径:/home/elas/es-8.7.0/d…

《向量数据库指南》——向量数据库市场格局

目录 向量数据库mapping Pinecone: Weaviate MongoDB: Chroma Milvus Cloud Qdrant Vespa,Yahoo 开源产品 Fabarta ArcVector Tencent Cloud VectorDB Faiss 向量数据库mapping

抄写Linux源码(Day1:获取并运行 Linux0.11)

Day1:获取并运行 Linux0.11 参考资料:https://zhuanlan.zhihu.com/p/438577225 这是我参考的一个别人写的 Linux0.11 解读:https://github.com/dibingfa/flash-linux0.11-talk 我获取 Linux-0.11 源码的链接:https://github.com/…

操作系统_进程与线程(四)

目录 4. 死锁 4.1 死锁的概念 4.1.1 死锁的定义 4.1.2 死锁产生的原因 4.1.3 死锁的处理策略 4.2 死锁预防 4.3 死锁避免 4.3.1 系统安全状态 4.3.2 银行家算法 4.3.2.1 数据结构描述 4.3.2.2 银行家算法描述 4.3.2.3 安全性算法 4.3.3 安全性算法举例 4.3.4 银行…

git使用(由浅到深)

目录流程图 1. 分布式版本控制与集中式版本控制 1.1 集中式版本控制 集中式版本控制系统有:CVS和SVN它们的主要特点是单一的集中管理的服务器,保存所有文件的修订版本;协同开发人员通过客户端连接到这台服务器,取出最新的文件或者提交更新…

Node.js 安装与版本管理(nvm 的使用)

安装 Node.js Node.js 诞生于 2009 年 5 月,截至今天(2022 年 3 月 26 号)的最新版本为 16.14.2 LTS 和 17.8.0 Current,可以去官网下载合适的版本。 其中,LTS(Long Term Support) 是长期维护…
推荐文章