makefile的当前工作目录

makefile的当前工作目录,makefile,working-directory,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\u 1.eps。我们是否需要给出相对于执行latex的当前工作目录的文

我有以下目录结构

project
|-- Makefile
|-- data
    |-- report.tex
    |-- plot_1.eps
Makefile
中的一条规则执行
latex data/report.tex
。由于工作目录是
project
,因此我只在那里获得report.dvi和其他输出文件。如何在
/data
中获取这些信息

此外,我还在报告中加入了
plot_1.eps
。但它仍然需要路径
data/plot\u 1.eps
。我们是否需要给出相对于执行
latex
的当前工作目录的文件路径?或
report.tex的位置

Makefile
中,我尝试了

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

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

latex将输出文件放在何处以及希望在何处找到输入文件的问题与make无关。你需要了解如何让乳胶按你想要的方式运行。大概有一些标志或类似的标志来控制将输出放在何处以及在何处查找包含的文件。在你的问题上使用
latex
标记

至于更改目录,配方的每一行都在不同的shell中运行,因此不能在一行中更改目录,然后在下一行中更改目录:工作目录(在UNIX系统中)是当前进程的一个函数,一旦该进程退出就会丢失

你想写一些类似的东西:

reportdvi: outputparser
         cd data && latex report.tex

(您不必
cd..
,因为正如我所说,工作目录更改只对当前命令生效)

这是makefiles中常见的“gotcha”。每个命令都在它自己的shell中执行,所以“cd”只发生在该shell中,但随后的命令将从make的当前目录再次运行

您要做的是将所有命令放在一行上(不需要“cd…”):

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

cd data && \
latex report.tex

有一个类似的问题,我发现在目录更改后执行程序时,它对其目录“位置”的程序视图没有任何作用,然后我发现它可以这样解决:

(cd ../../../yourdir && ./yourprogram.exe parameters) > output &
如果没有该文件,则“yourprogram.exe”仍将makefiles当前目录作为其目录位置视图。

可能的副本
(cd ../../../yourdir && ./yourprogram.exe parameters) > output &