makefile的当前工作目录

时间:2013-11-14 18:52:25

标签: makefile working-directory

我有以下目录结构

project
|-- Makefile
|-- data
    |-- report.tex
    |-- plot_1.eps

Makefile中的一项规则执行latex data/report.tex。由于工作目录是project,我只能获得report.dvi和其他输出文件。如何在./data中获取这些内容?

另外,我在报告中添加了plot_1.eps。但仍然期待路径data/plot_1.eps。我们是否需要提供相对于执行latex的当前工作目录的文件路径?或report.tex的位置?

Makefile中,我尝试了

reportdvi: outputparser
        cd data
        latex report.tex
        cd ..

但这并未改变工作目录,问题仍然存在。怎么办?

3 个答案:

答案 0 :(得分:26)

这是一个常见的问题'在makefile中。每个命令都在自己的shell中执行,所以" cd"只发生在该shell中,但后续命令再次从make的当前目录运行。

你想要做的是将所有命令放在一行上(你不需要" cd .."):

cd data && latex report.tex

或在行尾使用\告诉make连接这些行并将它们全部传递给shell。请注意,您仍然需要;&&来分隔命令。

cd data && \
latex report.tex

答案 1 :(得分:1)

latex将输出文件放在哪里以及它希望找到输入文件的位置的问题与make无关。您需要了解如何让 latex 按照您想要的方式行事。据推测,有标志或类似的控制输出的位置和在哪里找到包含的文件。在您的问题上使用latex标记。

对于更改目录,配方的每个单独行都在不同的shell中运行,因此您无法在一行中更改目录,然后在下一行中生效:工作目录(在UNIX系统中) )是当前过程的一个函数,一旦该过程退出就会丢失。

你想写一些类似的东西:

reportdvi: outputparser
         cd data && latex report.tex

(您没有cd ..,因为我说工作目录更改只对当前命令生效了)

答案 2 :(得分:0)

遇到类似的问题我发现,在更改目录后执行程序时,它没有为其目录“position”的程序视图做任何事情,然后我发现它可以像这样解决:

(cd ../../../yourdir && ./yourprogram.exe parameters) > output &

没有paranthesis然后“yourprogram.exe”仍然会将makefiles当前目录作为其目录位置视图。