很明显,目标比这两个ls的来源更新 系统管理命令:
[metaperl@andLinux ~/edan/pkg/gist.el] ls -l ../../wares/gist.el/gist.elc #target
-rw-r--r-- 1 metaperl metaperl 10465 Jul 18 10:56 ../../wares/gist.el/gist.elc
[metaperl@andLinux ~/edan/pkg/gist.el] ls -l yank/gist.el/gist.el #source
-rw-r--r-- 1 metaperl metaperl 13025 Jul 18 10:57 yank/gist.el/gist.el
[metaperl@andLinux ~/edan/pkg/gist.el]
然而,当我跑makepp -v
时,我被告知这条规则不仅仅取决于
在列出的目标上,还有cd和mv命令。
makepplog:目标
/home/metaperl/edan/wares/gist.el/gist.elc' depend on
的/ usr / local / bin中/ emacs的,/home/metaperl/edan/pkg/gist.el/yank/gist.el/gist.el',
/ bin中/ MV'
制作逻辑的哪个方面决定了制作这个制作的动作 target是决定是否制作的依赖链的一部分 目标?
在我看来,只有列出的来源应该影响是否 目标重建。
整个makepp -v
输出很长,存在于:
http://gist.github.com/480468
我的makepp文件:
include main.makepp
#VER
PKG := gist.el
URL := http://github.com/defunkt/$(PKG).git
TARGET := $(WARES)gist.el/gist.elc
$(TARGET) : yank/gist.el/gist.el
cd $(dir $(input)) && $(BYTECOMPILE) gist.el
mv $(dir $(input)) $(WARES)
perl {{
print 'github username: ';
my $username = <STDIN>;
print 'github API token: ';
my $api_token = <STDIN>;
system "git config --global github.user $username";
system "git config --global github.token $api_token";
use File::Butler;
my $lines = Butler('init.el', 'read');
my $loc = sprintf '%s%s', $EDAN_PKG, "$PKG/";
$lines =~ s/__LOC__/$loc/g;
$lines =~ s/__PKG__/$PKG/g;
Butler( $EDAN_EL, prepend => \$lines );
}}
yank/gist.el/gist.el : yank
cd yank && git clone http://github.com/defunkt/gist.el.git
yank:
mkdir yank
$(phony clean):
$(RM) -rf $(dir $(TARGET)) yank
答案 0 :(得分:1)
使用标准 make,在决定是否重建目标时,不会考虑制作目标的命令的内容。只考虑依赖关系;如果您在其他地方声明了依赖项,那么这可能会超出源代码。
你没有显示你的makepp文件,所以我无法确定,但来自Parsing command
的{{1}} ...消息让我怀疑makepp的行为与此计数的标准make不同。
答案 1 :(得分:0)
makepp
将重建目标。在您的情况下,我怀疑您在规则中使用的某些变量$(TARGET)
已经更改,或者makepp
看到命令是动态构造的并且是自动重建目标。尝试使用-m target_newer
makepp
选项强制它使用旧的GNU make
方法(即,如果源比目标更新,则只重新构建)。