自学内容网 自学内容网

【makefile】项目管理make & 基本用法

基本解释

开发makefile初衷:c语言写完代码,编译文件很麻烦,正常来说都会公开源代码,如果都用命令行gcc编译非常麻烦。所以一般由开发者编写makefile然后大家用make指令编译就可以了。

所以makefile最终的目标依旧只是编译,并且编译实质上还是需要各种语言的编译器。而桥梁是什么?其实也是通过shell,因为编译器一定会带有shell命令,make也是通过这种方式搭建桥梁。

所以本质上,就是通过makefile制定编译规则,make会根据规则检索调用链条(就是导包链条
但好处是你不需要针对版本就行查看,make会自动查看修改日期是否最新,自行决定是否需要重编译
然后make就会进行自动编译,而这中间编译本质上也是通过调用shell接口完成的。

基本用法

回到最主要的makefile编写。

一个makefile都会有一个最终目标编译文件,只要最早谁出现,谁就会被认定为这一次makefile的最终编译目标

所有格式都是
{target_name}: {import_name}
{shell_command}

import_name可以是源代码也可以是链接文件

细致一点还会有版本问题:翻pdf

假设说make命令后面没有跟任何东西,那么这一次make的目标就是makefile第一行见到的东西,然后根据声明的规则进行递归编译。

这种体系下的问题:每一次都只能编译一个文件

第二个东西,伪目标
刚才提及的都是编译的目标,所以应该都是输出文件作为目标,而输出文件多多少少都会有依赖文件,而伪目标不是文件,所以他一定没有依赖/这么说其实太绝对后面其实发现不一定。

伪目标名字可以随便取,只要不重复就行,但有一个保留字符,表明这一定是一个伪目标
.PHONY

有了伪目标之后,make就变得复杂了很多。可以进行嵌套等等一系列操作。

比如刚刚最早的,makefile的唯一目标。这里也可以是一个伪目标。这是其一
其二是,伪目标虽然没有需要的链接文件,但是import_name可以写上其他的伪目标或者文件。这就让一个伪目标对应不同的目标。这也让makefile能够进行大量编译的原因。

有了伪目标之后,makefile的目标也不再单一,原本只能够执行make这个命令,然后调用makefile去查看终极目标是什么然后进行递归调用。

有了伪目标,就可以直接make {PHONY_NAME} 只执行伪目标的内容,而不需要执行额外内容。

makefile编写常用内容

上述说完之后,最主要实操内容就是makefile的编写了。
另外的就不需要了解了。剩下的操作去交给shell做,makefile有函数等等乱七八糟的功能。
但个人认为纯纯添加负担,不如直接让shell或者让代码做。
makefile 就完成编译以及一些shell批量处理的功能就可以了
不然整个项目make file很复杂,代码很复杂,shell很复杂还活不活了?/微笑


# 一条文件基本骨架

{file_name or .PHONY} : {import_name}
{shell_command}
.....

# 变量声明,区别百度
{var_name} = {var_value}
{var_name} := {var_value}

# 使用变量,正常来说可以使用在需要value地方,也可以使用在var_value地方
$(var_name)

# 执行make命令,如果没有option就是直接执行目前dir下的makefile
$(MAKE) {options}

# 执行shell或者另外的命令
# 貌似执行自带的命令可以不需要添加$()
# 执行额外的命令,例如自己安装的命令就需要$()
# 执行命令会打印一下执行的命令,如果不需要打印,前面加上@
@ echo"sxxxxxxx"
$(MAKE) 
$(GO) xxx

# include导入其他makefile
include {file_path}



原文地址:https://blog.csdn.net/qq_49400568/article/details/142943542

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!