我有以下目录结构
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 ..
但这并未改变工作目录,问题仍然存在。怎么办?
答案 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当前目录作为其目录位置视图。