GNU make中是否有一种方法可以检测是否需要创建目标。更新?
由于MS lib.exe(我必须使用)的奇怪性,我需要这种差异化。
UN * X-like工具支持“ar cr lib.a file.o”创建或更新“lib.a”。不幸的是,MS lib.exe需要这样:
第一次调用:lib.exe -out:lib.lib file.obj next call(s):lib.exe -out:lib.lib lib.lib file.obj
所以我有2个不同的命令,目标和依赖是相同的...
lib.lib:file.obj lib.exe -out:$ @ $ ^ < - 如果lib.lib不存在
分别。
lib.exe -out:$ @ $ @ $ ^ < - 如果存在lib.lib
我希望这由GNU make处理,而不是将它委托给命令(aka shell)。
注意:双冒号规则实际上无济于事,因为问题隐藏在隐式规则中(%.obj):%。obj $(AR)$(ARFLAGS)-out:$ @ $ @ $ ^
没有内置方法可以执行此操作,但您可以编写规则来执行此操作:
lib.lib: file.obj
lib.exe -out:$@ $(if $(wildcard $@),$@) $^