I am using a Makefile for generating a document from its tex source. The whole project consisting of own input files (.tex
, .bib
, .eps
, …) and non-pre-installed static input files (.cls
, .sty
, .bst
) is kept under version control (git) for colloborative writing. I try to avoid messing up the main folder and use subdirectories for output and different kinds of input files.
All files which are not available within TeX Live should be in the repository to allow everyone a simple git clone
and make
to create the document. My question is: is there any convenient way which allows me to place all .cls
, .sty
, .bst
into a ./texmf
folder with in the document tree:
document-folder
├── .git/...
├── graphics/fig1-<...>.eps
├── graphics/fig2-<...>.eps
├── graphics/...
├── output/docname.pdf
├── output/docname.aux
├── output/...
├── texmf/docclass.cls
├── texmf/custom-package.sty
├── texmf/...
├── docname.tex
├── docname.bib
└── Makefile
The Makefile looks like this
LATEX := pdflatex
ODIR := ./output
LATEXOPTS:= --output-dir=$(ODIR)
$(TEXFILE).pdf: $(TEXFILE).tex $(TEXFILE).bib
$(LATEX) $(LATEXOPTS) $(TEXFILE).tex
Following solution works but as colloborators have to adjust environment variables every time or their .bashrc
for this project, I am not really happy about it:
$ export TEXINPUTS=".:./texmf:~/texmf:$TEXINPUTS"
$ make
Changing environment variables within a Makefile is not possible as far as I know.
Best Answer
You can in fact that environment variables inside a Makefile (tested with GNU make only). You need to do the following:
If you reference the previous value of the same variable you need to use the
:=
assignment instead which expands the value immediately. The normal=
is expanding the value at every use and will lead to an recursive assignment, whichmake
detects and reports as an error. There are no quotes required around the value and using them might cause trouble. Also variables must be written as${VAR}
on the right-hand side, not$VAR
.So you can add the following line to your Makefile, at best at the beginning: