Однако это происходит только в Windows 7. В Windows XP, когда он был построен и нетронутым, больше нет сборок. Я сузил вопрос до одного необходимого условия - $(jar_target_dir)
.Cygwin всегда обрабатывает цель
Вот часть кода
# The location where the JAR file will be created.
jar_target_dir := $(build_dir)/chrome
# The main chrome JAR file.
chrome_jar_file := $(jar_target_dir)/$(extension_name).jar
# The root of the JAR sources.
jar_source_root := chrome
# The sources for the JAR file.
jar_sources := bla #... some files, doesn't matter
jar_sources_no_dir := $(subst $(jar_source_root)/,,$(jar_sources))
$(chrome_jar_file): $(jar_sources) $(jar_target_dir)
@echo "Creating chrome JAR file."
@cd $(jar_source_root); $(ZIP) ../$(chrome_jar_file) $(jar_sources_no_dir)
@echo "Creating chrome JAR file. Done!"
$(jar_target_dir): $(build_dir)
echo "Creating jar target dir..."
if [ ! -x $(jar_target_dir) ]; \
then \
mkdir $(jar_target_dir); \
fi
$(build_dir):
@if [ ! -x $(build_dir) ]; \
then \
mkdir $(build_dir); \
fi
так, если я просто удалить $(jar_target_dir)
$(chrome_jar_file)
из правила, он отлично работает.
UPD:
Вот основной вывод отладочной от марки на Windows 7
Reading makefiles...
Updating goal targets....
File `all' does not exist.
Prerequisite `../bin/build/chrome' is newer than
target `../bin/build/chrome/alt.jar'.
Must remake target `../bin/build/chrome/alt.jar'.
Creating chrome JAR file.
updating: content/about.js (deflated 66%)
updating: content/sprintf.js (deflated 52%)
...
и статистика
$ stat ../bin/build/chrome/alt.jar ../bin/build/chrome
File: `../bin/build/chrome/alt.jar'
Size: 29220 Blocks: 32 IO Block: 65536 regular file
Device: 22c6affh/36465407d Inode: 59672695062724268 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/ acid) Gid: ( 513/ None)
Access: 2010-05-05 13:03:01.066457300 +0900
Modify: 2010-05-05 13:03:01.088960100 +0900
Change: 2010-05-05 13:03:01.091460400 +0900
File: `../bin/build/chrome'
Size: 0 Blocks: 0 IO Block: 65536 directory
Device: 22c6affh/36465407d Inode: 3940649674014457 Links: 1
Access: (0755/drwxr-xr-x) Uid: (1000/ acid) Gid: ( 513/ None)
Access: 2010-05-05 13:03:01.090960400 +0900
Modify: 2010-05-05 13:03:01.090960400 +0900
Change: 2010-05-05 13:03:01.090960400 +0900
как вы можете видеть chrome
реж действительно новее, чем alt.jar
SOL: Как Эри c упомянуто, было плохой идеей иметь обязательное условие каталога и сделать производственный файл внутри него. Каждый раз, когда mtime обновляется, «требуется перестроить». Эта часть понятна. Однако в некоторых случаях временные метки каталога и файла, созданные внутри, всегда равны. Это запутывает ...
Борясь, чтобы найти вопрос в тексте - можете ли вы немного осветить проблему? –
Да, проблема описана в теме. После создания цели я должен получить «актуальное» сообщение для последующих попыток сборки для запуска make. Тем не менее, он всегда запускает команду для '$ (chrome_jar_file)' – Pablo
Можете ли вы подтвердить: он переделывает '$ (chrome_jar_file)', но не '$ (jar_target_dir)' или что-нибудь еще? и '$ (jar_target_dir)' существует? – Beta