似乎-include
的存在导致忽略--just-print
/ -n
标志。这是不可取的。
我想明白为什么会这样。我的示例Makefile
:
.PHONY: all
all: eg.final.d
define MYRULE
$(1).targets:
echo 'final1.txt\nfinal2.txt\nfinal3.txt' > $$@
$(1).final.d: $(1).targets
cat $$< | sed 's/$$$$/: initial.txt/' > $$@
-include $(1).final.d
endef
$(eval $(call MYRULE, eg))
当发出make -n all
时,所有目标都被创建(而不是仅打印要按预期运行的命令)。使用$(info ..)
并没有帮助我弄清楚这里发生了什么。
在尝试阅读this blog post时,我尝试了一些更好的选择:
.PHONY: all
all: eg.final.d
define MYRULE
$(1).targets:
echo 'final1.txt\nfinal2.txt\nfinal3.txt' > $$@
$(1).final.d: $(1).targets
cat $$< | sed 's/$$$$/: initial.txt/' > $$@
endef
$(eval $(call MYRULE, eg))
-include $(wildcard *.final.d)
从define变量中取出include语句,并在eval调用之后包含生成的依赖项,以防止始终执行配方。
运行此配方时input.egtool.log
并且&gt; 0个其他文件(OTHER_FILES
)
input.egtool.log: input.txt
egtool $< > $@
b / c不幸的原因,我不知道这些其他文件的确切名称是提前的(但是对于相同的输入总是得到相同的输出)。但是,这些其他文件的名称将写入日志文件。我希望保留并使用下游的其他文件,因此我希望将它们设置为依赖于上面的input.egtool.log
配方(或至少它的输出)并在我的makefile中包含这些依赖项:
OTHER_FILES = ???HELP???
$(OTHER_FILES): input.egtool.log
.PHONY: all
all: $(OTHER_FILES)
这样,如果input.txt更改OTHER_FILES
也会相应更改。我尝试通过上述方法做到这一点,但我的方法不正确。
答案 0 :(得分:0)
这是makefile中的预期行为。请参阅GNU制作手册的 Instead of Executing Recipes 部分中的<div className="col-lg-4">
<select id="categories" onChange={handleCategories} className="form-control">
{
this.state.categories.map((i, index) => <option key={index} >{i}</option>)
}
</select>
</div>
说明:
“空操作”。 make make打印使目标更新所需的配方,但不实际执行它们。请注意,即使使用此标志,仍会执行某些配方(请参阅MAKE变量的工作原理)。此外,还需要更新包含的makefile所需的任何配方(请参阅如何重新制作Makefile)。
特别注意这里的最后一句话。
我建议不要使用这种自动依赖生成模型。有关更好的方法,请参阅示例this blog post关于自动依赖关系生成。