AC>> DEBUG ?= 0 # кстати не помню ?= это GNUmake или вообще make? хез
AC>> ...
AC>> debug_depends:
AC>> test -e $@ || echo $(DEBUG) > $@
AC>> test "`cat [EMAIL PROTECTED]" = "$(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: [EMAIL PROTECTED] jabber://[EMAIL PROTECTED]
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
signature.asc
Description: Digital signature

