Répertoire de travail actuel de makefile
J'ai la structure de répertoire suivante
project
|-- Makefile
|-- data
|-- report.tex
|-- plot_1.eps
Une des règles dans le Makefile
exécute latex data/report.tex
. Comme le répertoire de travail est project
je suis de rapport.dvi et d'autres fichiers de sortie il y a seulement. Comment puis-je obtenir ces dans ./data
?
Aussi, j'ai inclus plot_1.eps
dans le rapport. Mais encore sa attend le chemin data/plot_1.eps
. Devons-nous donner le chemin du fichier par rapport au répertoire de travail courant d'où latex
est exécuté? Ou de l'emplacement de report.tex
?
Dans le Makefile
j'ai essayé
reportdvi: outputparser
cd data
latex report.tex
cd ..
Mais cela n'a pas changer le répertoire de travail et le problème persiste. Que faire?
source d'informationauteur Shashwat
Vous devez vous connecter pour publier un commentaire.
C'est une "chasse aux sorcières" dans les makefiles. Chaque commande est exécutée dans sa propre coquille, de sorte que "cd" ne se produit à l'intérieur de cette coquille, mais à la suite de la commande est exécutée à nouveau à partir du répertoire courant.
Ce que vous voulez faire est de mettre toutes les commandes sur une seule ligne (et vous n'avez pas besoin de "cd .."):
ou de l'utilisation
\
à la fin de la ligne pour dire à faire pour concaténer les lignes et tous les passer à la coque. Notez que vous devez toujours;
ou&&
pour séparer les commandes.Les questions de l'endroit où latex met ses fichiers de sortie et où il s'attend à trouver des fichiers d'entrée n'a rien à voir avec faire. Vous avez besoin de savoir comment obtenir latex à se comporter de la façon dont vous le souhaitez. Sans doute il y a les drapeaux ou semblable à contrôler où mettre de sortie et où trouver les fichiers inclus. Utilisation
latex
balises sur votre question.Que pour modifier les répertoires, chaque ligne de la recette est exécuté dans un environnement différent, de sorte que vous ne pouvez pas modifier les répertoires en une seule ligne, et alors que l'être en effet dans la ligne suivante: le répertoire de travail (dans les systèmes UNIX) est une fonction du processus courant et est perdu une fois que le processus s'arrête.
Vous voulez écrire quelque chose comme:
(vous n'avez pas à
cd ..
car comme je l'ai dit répertoire de travail changements prennent effet pour la commande en cours)Un problème similaire, j'ai trouvé que, lors de l'exécution de programmes après le changement de répertoire, il n'a rien fait pour les programmes, en vue de son répertoire "position", puis j'ai trouvé qu'il pourrait être résolu comme ceci :
sans paranthesis alors "yourprogram.exe" toujours le makefile du répertoire courant que son répertoire de vue position.