makefile--隐式规则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile--隐式规则相关的知识,希望对你有一定的参考价值。

参考技术A

示例2--makefile中出现同名命令

注意事项

示例3--使用include关键字时,出现同名命令
makefile文件与1.mk文件位于同一个目录下

makefile

1.mk

func.c

main.c

makefile

makefile等价于下面的文件

从以上makefile执行结果可以看到,CC、RM、以及%.o : %.c 调用的 @ $^,都是make中默认的隐式规则。

通过使用$(.VARIABLES)可以查看make中所有预定义的变量

示例5--获取makefile中的预定义变量

示例6--改变预定义变量将改变隐式规则的行为

查看make的隐式规则

Makefile 中的隐式规则

【中文标题】Makefile 中的隐式规则【英文标题】:Implicit Rules in Makefile 【发布时间】:2010-09-15 09:48:27 【问题描述】:

嗨,我想在 linux 中做一个 Makefile,它将把目录中的所有 .cpp 文件编译它们 并创建一个我可以激活的 .o 文件,我如何使用隐式规则进行操作

谢谢 马蒂

【问题讨论】:

您的意思是一个.a.so 文件吗? n 个 .cpp 文件将有 n 个 .o 文件。我认为您在谈论.so。使用 ar rcs 生成库 【参考方案1】:

隐式规则将帮助您创建目标文件,但必须明确地将它们组合在一起(因为很少这样做)。

OBJ = a.o b.o

big.o : $OBJ
    $LD -r -o $@ $^

【讨论】:

【参考方案2】:

或者你可以在正确定义变量后尝试以下方法:

.o: .cpp
    $(CPP) -c $(CPPFLAGS) $< -o $@
$(EXECUTABLE): $(OBJ)
    $(CPP) $(LDFLAGS) $^ -o $@

【讨论】:

$(CPP) 和 $(CPPFLAGS) 用于预处理器,而不是编译器。我认为您的意思是 $(CXX) 和 $(CXXFLAGS)。

以上是关于makefile--隐式规则的主要内容,如果未能解决你的问题,请参考以下文章

Makefile 隐式规则不起作用

Makefile 中隐式规则中的 -c 标志错误

有没有办法定义全局 Makefile(隐式)规则?

makefile(06)_隐式规则

makefile:隐式规则:相同的目标不同的先决条件

makefile失败 - 隐式规则编译一个目标文件但不编译其余文件