为什么Makefile include应该是:target?
我一直在使用Makefile,为了将一些东西分开,我决定包含一个新的通用Makefile。我面临的问题是,我的第一个makefile如下所示: 文件名Makefile.test为什么Makefile include应该是:target?,makefile,Makefile,我一直在使用Makefile,为了将一些东西分开,我决定包含一个新的通用Makefile。我面临的问题是,我的第一个makefile如下所示: 文件名Makefile.test include ./Makefile.a all: a b c b: @echo "b" c: @echo "c" 文件名Makefile.a a: @echo "a" 当我执行makefile:make-f makefile.test时,我只得到一个打印出来的文件,它就完成了 使其工作的唯一
include ./Makefile.a
all: a b c
b:
@echo "b"
c:
@echo "c"
文件名Makefile.a
a:
@echo "a"
当我执行makefile:make-f makefile.test时,我只得到一个打印出来的文件,它就完成了
使其工作的唯一方法是将include bellow放置在all:target的任何位置
这是为什么会这样
谢谢 当你这么说的时候:
include ./Makefile.a
make只是将Makefile.a拉入当前Makefile,方法与C中的include相同:它插入Makefile.a的内容以替换include语句并继续。结果是make在开始思考该做什么时看到了这一点:
a:
@echo "a"
all: a b c
b:
@echo "b"
c:
@echo "c"
因此,源代码顺序中的第一个目标将是,由于您没有指定目标,make将使用第一个目标。这就是你的结果的来源
如果需要,可以显式指定all目标:
make -f Makefile.test all
这将使用all目标,而不管它出现在Makefile中的什么位置
如果您使用的是GNU Make,那么您可以使用在Makefile.test中指定默认目标,这样您就不必担心顺序:
include ./Makefile.a
all: a b c
b:
@echo "b"
c:
@echo "c"
.DEFAULT_GOAL := all
感谢提醒。如果使用GNU make,还可以通过设置覆盖Makefile.test中的默认目标。默认目标:=全部。@Idelic:谢谢提醒,我已经做了一些重要的make工作了。