【发布时间】:2010-05-04 14:32:43
【问题描述】:
但是,它只发生在 Windows 7 上。在 Windows XP 上,一旦构建并完好无损,就不再构建。
我将问题缩小到一个先决条件 - $(jar_target_dir)。
这是部分代码
# 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
所以如果我只是从$(chrome_jar_file) 规则中删除$(jar_target_dir),它就可以正常工作。
更新:
这是 Windows 7 上 make 的基本调试输出
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 dir 确实比 alt.jar 更新
索尔: 就像 Eric 提到的那样,拥有目录先决条件并在其中制作生产文件是个坏主意。每次更新 mtime 因此“需要重建”。这部分很清楚。 但是,在某些情况下,在其中创建的目录和文件的时间戳总是相等的。这很令人困惑...
【问题讨论】:
-
在文中苦苦寻找问题——你能稍微澄清一下问题吗?
-
是的,主题中描述的问题。构建目标后,我应该获得“最新”消息,以便后续构建尝试运行 make。但是,它总是为
$(chrome_jar_file)启动命令 -
你能确认一下:它重制了
$(chrome_jar_file),但不是$(jar_target_dir)或其他任何东西?$(jar_target_dir)存在吗? -
@Beta:是的,我可以确认每次它执行
$(chrome_jar_file)中描述的命令时。不是来自$(jar_target_dir)。还用一些统计数据和调试输出更新了我的原始帖子。
标签: windows-7 windows-xp cygwin makefile