13

次のディレクトリ構造があります

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

Makefileexecuteのルールの 1 つlatex data/report.tex。作業ディレクトリはproject. どうすればそれらを入手でき./dataますか?

plot_1.epsまた、レポートに含めました。しかし、それでもパスを期待していますdata/plot_1.eps。が実行されている現在の作業ディレクトリからの相対ファイル パスを指定する必要がありますlatexか? またはの場所report.tex

Makefile、試してみました

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

しかし、これは作業ディレクトリを変更せず、問題は解決しません。何をすべきか?

4

3 に答える 3

27

これは、メイクファイルの一般的な「落とし穴」です。各コマンドは独自のシェルで実行されるため、「cd」はそのシェル内でのみ発生しますが、後続のコマンドは make の現在のディレクトリから再度実行されます。

やりたいことは、すべてのコマンドを 1 行にまとめることです (「cd ..」は必要ありません)。

cd data && latex report.tex

または\行末で使用して、make に行を連結し、それらすべてをシェルに渡すように指示します。コマンドを分離する;orがまだ必要であることに注意してください。&&

cd data && \
latex report.tex
于 2013-11-14T19:04:27.513 に答える
1

latex が出力ファイルを配置する場所と入力ファイルを見つける場所の問題は、make とは関係ありません。ラテックスを希望どおりに動作させる方法を見つける必要があります。おそらく、出力を配置する場所と含まれるファイルを見つける場所を制御するためのフラグなどがあります。latex質問にはタグを使用してください。

ディレクトリの変更に関しては、レシピの個々の行が異なるシェルで実行されるため、ある行でディレクトリを変更してから、次の行でそれを有効にすることはできません: 作業ディレクトリ (UNIX システムの場合) は、現在のプロセスの機能を失い、そのプロセスが終了すると失われます。

あなたは次のようなものを書きたい:

reportdvi: outputparser
         cd data && latex report.tex

cd ..(作業ディレクトリの変更は現在のコマンドに対してのみ有効になると述べたので、する必要はありません)

于 2013-11-14T19:03:53.787 に答える
0

同様の問題があり、ディレクトリの変更後にプログラムを実行すると、ディレクトリの「位置」のプログラムビューに対して何もしないことがわかりました。次に、次のように解決できることがわかりました。

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

括弧がない場合、「yourprogram.exe」は、ディレクトリ位置ビューとしてメイクファイルの現在のディレクトリを保持します。

于 2014-05-21T19:47:55.423 に答える