如何让 Makefile 从另一个文件中看到目标
How to let Makefile see target from another file
我有这样的Makefile
创建脚本的内容:
.PHONY cluster-run
cluster-run:
make $(TARGET) --just-print >> tmp_script.sh;
还有一个nn.mk
:
.PHONY nn-model
include Makefile
nn-model:
python run-nn.py
为了便于阅读,我有两个单独的 Makefile,因为它们的内容很大,而且我还有另一个“*.mk”文件,如 nn-lstm.mk
、nn-conv.mk
等
我启动如下:
make -f nn.mk cluster-run TARGET=nn-model
但是make
报错:
make nn-model --just-print >> tmp_script.sh;
make[1]: *** No rule to make target `nn-model'. Stop.
make: *** [cluster-run] Error 2
对我来说,这种行为很奇怪,因为目标 nn-model
确实存在。我该如何解决这个问题?
所以发生的事情是,当您构建 cluster-run
时,它会调用一个递归 make,它读取 Makefile
,并要求它构建 $(TARGET)
(其中将包括 nn-model
).
注意递归 make 是一个新的 make 并且不从父 make 继承变量或规则,所以这个 make 实例不知道如何构建 nn-model
如果你想让子 make 看到这个, 那么子 make 必须包含父 make...
首先,你不应该在食谱中使用原始 make
。始终使用 $(MAKE)
变量。
其次,问题是因为当你 运行 子 make 时你没有提供 -f
选项:
make nn-model --just-print >> tmp_script.sh;
因此,它读取 Makefile
而不是 nn.mk
,因此没有构建目标 nn-model
.
的规则
请记住,如果您 运行 像这样的子制作,它会以全新的方式开始一个全新的制作过程:子制作过程中定义的 none 目标是已知的-启动时制作。
我不知道你所说的 目标是什么意思 nn_model
确实存在 但绝对没有名为 nn_model
的文件,否则你不会明白错误。
我有这样的Makefile
创建脚本的内容:
.PHONY cluster-run
cluster-run:
make $(TARGET) --just-print >> tmp_script.sh;
还有一个nn.mk
:
.PHONY nn-model
include Makefile
nn-model:
python run-nn.py
为了便于阅读,我有两个单独的 Makefile,因为它们的内容很大,而且我还有另一个“*.mk”文件,如 nn-lstm.mk
、nn-conv.mk
等
我启动如下:
make -f nn.mk cluster-run TARGET=nn-model
但是make
报错:
make nn-model --just-print >> tmp_script.sh;
make[1]: *** No rule to make target `nn-model'. Stop.
make: *** [cluster-run] Error 2
对我来说,这种行为很奇怪,因为目标 nn-model
确实存在。我该如何解决这个问题?
所以发生的事情是,当您构建 cluster-run
时,它会调用一个递归 make,它读取 Makefile
,并要求它构建 $(TARGET)
(其中将包括 nn-model
).
注意递归 make 是一个新的 make 并且不从父 make 继承变量或规则,所以这个 make 实例不知道如何构建 nn-model
如果你想让子 make 看到这个, 那么子 make 必须包含父 make...
首先,你不应该在食谱中使用原始 make
。始终使用 $(MAKE)
变量。
其次,问题是因为当你 运行 子 make 时你没有提供 -f
选项:
make nn-model --just-print >> tmp_script.sh;
因此,它读取 Makefile
而不是 nn.mk
,因此没有构建目标 nn-model
.
请记住,如果您 运行 像这样的子制作,它会以全新的方式开始一个全新的制作过程:子制作过程中定义的 none 目标是已知的-启动时制作。
我不知道你所说的 目标是什么意思 nn_model
确实存在 但绝对没有名为 nn_model
的文件,否则你不会明白错误。