Makefile GNU make:执行目标,但从文件中获取依赖项
我希望执行目标公司的规则,但所有从属目标公司都应认为该目标公司已满足 我怎样才能做到这一点 例如:Makefile GNU make:执行目标,但从文件中获取依赖项,makefile,gnu-make,Makefile,Gnu Make,我希望执行目标公司的规则,但所有从属目标公司都应认为该目标公司已满足 我怎样才能做到这一点 例如: $(NETWORK_SHARE)/foo.log: @echo Warning: server offline, still continue ... @exit 0 foo.csv: $(NETWORK_SHARE)/foo.log @echo Long export from a (different) server @echo sleep 20 @e
$(NETWORK_SHARE)/foo.log:
@echo Warning: server offline, still continue ...
@exit 0
foo.csv: $(NETWORK_SHARE)/foo.log
@echo Long export from a (different) server
@echo sleep 20
@echo foo > $@
如果存在$(网络共享)/foo.log:如果$(网络共享)/foo.log比foo.csv新,则应重建foo.csv;否则,不会发生任何事情(默认)
如果$(网络共享)/foo.log不存在(例如,服务器脱机、故障等),则只应打印一条指示问题的消息,但只有当foo.csv不存在时,才应生成foo.csv
我使用了.PHONY并返回了不同的返回值,但对于案例2,只要我在$(NETWORK\u SHARE)/foo.log上执行某个操作,就会发生昂贵的“导出”
问候
divB太好了,多亏了我相关问题()中的答案,我现在可以提供一个解决方法:
.PHONY: always-remake
NETWORK_SHARE = //server/dfs/common/logs
.PHONY: all
all: foo.csv
# file does not exist ...
ifeq "$(wildcard $(NETWORK_SHARE)/foo.log)" ""
old_file: always-remake
@echo Warning: network is not available ....
foo.csv: old_file
@echo Expensive export
@sleep 10
@echo $@ > $@
else
foo.csv: $(NETWORK_SHARE)/foo.log
@echo Doing expensive export since log file changed ...
@sleep 10
@echo $@ > $@
endif
“旧_文件”是一个虚拟文件,必须存在,并且不应比任何其他文件更新(例如1/1/1971,00:00)
问候
divB看起来不像是使用一些旧文件(有人可能会无意中触摸到),而是可以使用仅限订单的先决条件。这里引用了GNU makefile手册(第4.3章) 然而,有时候,您会遇到想要强制执行 在不强制 如果执行其中一个规则,则要更新的目标。那么,, 您希望定义仅限订单的先决条件。仅订购先决条件 可以通过在必备项中放置管道符号(|)来指定 列表:管道符号左侧的任何先决条件都是正常的;任何 右侧的先决条件仅适用于订单:
targets : normal-prerequisites | order-only-prerequisites
我知道没有一个干净的方法可以做到这一点,但是你可以用命令中的条件句来混淆它…嗨,谢谢你,这是我已经做过的,但是,我仍然有问题。我想我找到了一个重新表述的好方法:我想在一个最新的目标上输出一条消息(执行命令)。