AC>> DEBUG ?= 0 # кстати не помню ?= это GNUmake или вообще make? хез AC>> ... AC>> debug_depends: AC>> test -e $@ || echo $(DEBUG) > $@ AC>> test "`cat $@`" = "$(DEBUG)" || echo $(DEBUG) > $@ AC>> и дальше ставим зависимость от debug_depends AC>> то есть получится что make его перезаписывать будет только при смене AC>> переменных AC>> и соответственно в зависимости: AC>> %.o: %.c debug_depends AC> Начнем с того, что make его вообще перезаписывать не будет. Он его AC> запишет один раз, и все. а ну да и правда, надо это в shell выносить, либо в цель .PHONY, которая всегда будет выполняться: DEBUG ?= 0 DEBUG_FILE = tmp/debug SRC = test.pl TARGET = tmp/$(SRC) all: debug_dep $(TARGET) $(DEBUG_FILE): debug_dep $(TARGET): $(DEBUG_FILE) $(SRC) cat $(SRC) > $(TARGET) debug_dep: @test -e $(DEBUG_FILE) || echo $(DEBUG) > $(DEBUG_FILE) @test "`cat $(DEBUG_FILE)`" = "$(DEBUG)" || echo $(DEBUG) > $(DEBUG_FILE) .PHONY: debug_dep и работает: apache:[~]$ make DEBUG=0 apache:[~]$ make DEBUG=0 apache:[~]$ make DEBUG=1 cat test.pl > tmp/test.pl apache:[~]$ make DEBUG=1 apache:[~]$ make DEBUG=0 cat test.pl > tmp/test.pl apache:[~]$ make DEBUG=0 правда не пишет про то что "цель не требует выполнения команд", потому что реально команды выполняет. если хочется совсем уж короткой работы то так: DEBUG ?= 0 DEBUG_FILE = tmp/debug SRC = test.pl TARGET = tmp/$(SRC) $(shell \ test -e $(DEBUG_FILE) || echo $(DEBUG) > $(DEBUG_FILE); \ test "`cat $(DEBUG_FILE)`" = "$(DEBUG)" || echo $(DEBUG) > $(DEBUG_FILE) \ ); all: $(TARGET) $(TARGET): $(DEBUG_FILE) $(SRC) cat $(SRC) > $(TARGET) и работа: apache:[~]$ make DEBUG=1 make: Цель `all' не требует выполнения команд. apache:[~]$ make DEBUG=1 make: Цель `all' не требует выполнения команд. apache:[~]$ make DEBUG=0 cat test.pl > tmp/test.pl apache:[~]$ make DEBUG=0 make: Цель `all' не требует выполнения команд. apache:[~]$ make DEBUG=0 make: Цель `all' не требует выполнения команд. apache:[~]$ make DEBUG=1 cat test.pl > tmp/test.pl apache:[~]$ make DEBUG=1 make: Цель `all' не требует выполнения команд. apache:[~]$ make DEBUG=1 make: Цель `all' не требует выполнения команд. AC> Ты б хоть проверил свое "решение", прежде чем предлагать. да, я собственно шеллскрипт (идею) предлагал, а так сорри действительно не проверил :( а так вот в вышеприведенном именно этот скрипт и работает :) -- ... mpd is off . ''`. Dmitry E. Oboukhov : :’ : email: unera@debian.org jabber://UNera@uvw.ru `. `~’ GPGKey: 1024D / F8E26537 2006-11-21 `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
Attachment:
signature.asc
Description: Digital signature