我有一个makefile调用一个python脚本,它与makefile位于同一个目录中。它工作得很好。
在生成文件#1:从另一个目录中的makefile调用python脚本
auto:
./myscript.py
现在,我还有一个Makefile文件,在另一个目录,并希望从中调用第一个生成文件。 在生成文件#2:
target:
cd $(DIR); $(MAKE) auto;
的问题是,在脚本运行时,它运行似乎是在同一个目录的生成文件#2。在标准输出上,在执行make之后和脚本运行之前,我看到“make [3]:离开目录”和到#1的路径。
在一个建议,我试过修改生成文件#2:
target:
(cd $DIR; $MAKE auto;)
但是这解释为 “CD IR; AKE自动”。当我替换DIR和MAKE的括号时,我会得到和以前一样的行为。
我试着修改python脚本,让它假设它是在目录#2中,并给它的路径#1,但行为不会改变。
发生了什么,我该怎么办?
更新: 我下面的评论搞砸代码格式化所以它在这里:
我想这一点,并得到了你的描述基本上是什么。可能与target自动调用“makefile.rules”文件有什么关系?
auto:
@echo this is makefile \#1 making [email protected] in $(PWD)
FLAG=1 $(MAKE) -f makefile.rules rulestargetA
FLAG=2 $(MAKE) -f makefile.rules rulestargetB
./myscript.py
为了简单起见,我省略了这个事实,但现在我想知道。
更新2: 我不明白为什么makefile文件不会导致因为尽管它在它所在的目录中运行myscript.py,但我一直在试图让脚本运行即使从不同目录调用时也是如此。它打开几个子进程,在每个子进程中运行一个可执行文件,并将每个子进程的stdout保存为文件。 Python的subprocess.Popen传入当前工作目录,默认情况下,该目录是脚本从其调用的位置,而不是其驻留的位置。我已经添加了脚本,将其作为cwd传入到Popen呼叫中。但是,出于某种原因,当我在自己的目录中运行myscript.py时,它可以工作,但是当我从其他地方(从命令行)调用它时,它会在proc.communicate()中挂起。我应该解决这个python问题,但我仍然想知道为什么外部makefile不能从它自己的目录调用这个脚本。
我不得不羞于承认这个记录,结果是在makefile#1中出现了剪切和粘贴错误。自动目标没有使用正确的标志调用makefile.rules,因此挂起的可执行文件(由myscript.py调用)。我能够用直接命令创建挂起;没有涉及任何makefile或脚本。 在调用myscript.py之前,它留下dir#1的makefile消息是一个红色鲱鱼:该脚本实际上是从dir#1调用的。我不明白,但至少它现在有效。 – jasper77 2010-08-04 18:34:29