makefile - makefile 的当前工作目录

标签 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 ..

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

最佳答案

这是 makefile 中常见的“陷阱”。每个命令都在其自己的 shell 中执行,因此“cd”仅在该 shell 中发生,但后续命令会从 make 的当前目录再次运行。

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

cd data && latex report.tex

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

cd data && \
latex report.tex

关于makefile - makefile 的当前工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985936/

相关文章:

makefile - 在 Makefile 中获取最后一个进程的 PID

c - 没有使用 fopen() 创建文件;为什么,或者他们在哪里?

java - 如何在 Linux 上用 Java 获取当前工作目录

makefile - $<(美元符号+左三角括号)在makefile中是什么意思?

Makefile 示例和/或模板

c++ - Readelf 报告程序是一个共享库而不是可执行文件

appdomain - 应用程序域之间的独立工作目录

c++ - 编译器标志更改时自动重新编译

dart - 如何在 Dart 中设置当前工作目录?

concurrency - Julia 语言 - @async tasks::Current-Directory 中的状态