Site perso : Emmanuel Branlard

Subsections

22. Makefiles

22.1 Fortran

########################################################################
### General syntax
# target: dependencies
#		command
#
### Variables : in a command:
# $@ : target name
# $< : current(first) dependency
# $ˆ : all dependency, even in other folders(cf VPATH)
# $? : dependency that have been modified (were not up to date)
# $* : target name without extension (%)
# * : like in a shell, *.c *.o
# In target and dependency
# %  : particular target or rule
#
# Functions $()
# SRC:=$(wildcard *.o)
########################################################################
FC			=	ifort
CC  		=	gcc
FFLAGS  	=  -g  
CFLAGS 		=  -Df2cFortran
LDFLAGS		=
INCLS      	=
BINNAME	    =
NWTCLIB     = ../../NWTC_Lib/Source/
INFLOWLIB	= ../../InflowWind/Source/
PATHSEP		=:
########################################################################

SRC=$(wildcard *.f90)
OBJ= $(patsubst %.f90,%.o,$(SRC))



all: $(OBJ)

init:
	@echo $(SRC)
	@echo $(OBJ)
	@(cd $(NWTCLIB) ; $(MAKE) all);
	@(cd $(INFLOWLIB) ; $(MAKE) all);


clean: 
	rm *.mod *.o

%.o: %.f90
	$(FC) $(FFLAGS) $(INCLS) -c  $< -I$(NWTCLIB) -I$(INFLOWLIB)

AeroDyn.o :  SharedTypes.o AeroMods.o AeroSubs.o
AeroSubs.o: GenSubs.o AeroMods.o
GenSubs.o : AeroMods.o

22.2 Latex

#----------------------------------------------------
# DOCUMENT OPTIONS
#----------------------------------------------------
MASTER=WTbook-Branlard
OS=WINDOWS
USE_BIBTEX=1
USE_MAKEINDEX=1
USE_MAKEGLOSS=0
USE_PSTRICKS=0
#----------------------------------------------------
# PATHS
#----------------------------------------------------
FIGSDIR=figs
FIGSDUMPDIR=figsdump
SVGDIR=svg
SVGTEXDIR=svgtex
BIBDIR=bib
SRCDIR=.
#----------------------------------------------------
# BINARIES
#----------------------------------------------------

ifeq ($(OS),Windows_NT)
	LATEX	 = C:/Unix/Miktex/miktex/bin/latex
	BIBTEX	 = C:/Unix/Miktex/miktex/bin/bibtex
	DVIPS	 = C:/Unix/Miktex/miktex/bin/dvips
	PDFLATEX = C:/Unix/Miktex/miktex/bin/pdflatex
	MAKEINDEX= C:/Unix/Miktex/miktex/bin/makeindex
	LATEXHTML= C:/Unix/Miktex/miktex/bin/latex2html
	PS4PDF= ps4pdf 
else
	LATEX	 = latex
	BIBTEX	 = bibtex
	DVIPS	 =dvips
	PDFLATEX =pdflatex
	MAKEINDEX= makeindex
	LATEXHTML= latex2html
	PS4PDF= ps4pdf
endif

test:
	@echo Done
	@echo $(LATEX)

CONVERT=convert
LN=ln
PDFTOEPS=pdftops -eps
EPSTOPDF=epstopdf
SVGTOLATEX=svg2latex.py
SVGTOPDF=inkscape -D -A
SVGTOEPS=inkscape -D -E

#----------------------------------------------------
# FLAGS
#----------------------------------------------------
TEX_FLAGS	=  --file-line-error-style --interaction=nonstopmode
BIB_FLAGS	=
HTML_FLAGS	=
PDFLATEX_FLAGS	= --file-line-error-style --interaction=nonstopmode
PS2PDF_FLAGS    = -dMaxSubsetPct=100 -dCompatibilityLevel=1.2 -dSubsetFonts=true -dEmbedAllFonts=true
MAKEINDEX_FLAGS = -s pre/index_style.ist
MAKEGLOSS_FLAGS = -s pre/glossaire_style.ist
DVIPS_FLAGS	= -Ppdf -G0 

#----------------------------------------------------
# SRC FILES
#----------------------------------------------------
FIGS=$(notdir $(wildcard $(FIGSDUMPDIR)/*))
FIGSRC=$(patsubst %,$(FIGSDUMPDIR)/%,$(FIGS))

TEXSRC	=  $(wildcard $(SRCDIR)/pre/*.tex) \
	  $(wildcard $(SRCDIR)/tex/*.tex) 

BIBSRC	= $(wildcard $(BIBDIR)/*.bib)
# Using Bibtex
ifneq ($(strip $(BIBSRC)),)
BBLSRC	= $(MASTER).bbl
endif


#----------------------------------------------------
# Display Codes (this is so we can track passes)
#----------------------------------------------------
SETCOLOR_BLACK	= @echo "\\033[0;30m"
SETCOLOR_RED 	= @echo "\\033[0;31m"
SETCOLOR_GREEN 	= @echo "\\033[0;32m"
SETCOLOR_BLUE	= @echo "\\033[0;34m"





#----------------------------------------------------
# PNG
#-----------------------------------------------------
PNGS=$(notdir $(wildcard $(FIGSDUMPDIR)/*.png))
PNGS2EPSS=$(patsubst %,$(FIGSDIR)/%,$(PNGS:.png=.eps))
PNGS2PDFS=$(patsubst %,$(FIGSDIR)/%,$(PNGS:.png=.pdf))
#-----------------------------------------------------
# JPG
#-----------------------------------------------------
JPGS=$(notdir $(wildcard $(FIGSDUMPDIR)/*.jpg))
JPGS2EPSS=$(patsubst %,$(FIGSDIR)/%,$(JPGS:.jpg=.eps))
JPGS2PDFS=$(patsubst %,$(FIGSDIR)/%,$(JPGS:.jpg=.pdf))
#-----------------------------------------------------
# EPS
#-----------------------------------------------------
EPSS=$(notdir $(wildcard $(FIGSDUMPDIR)/*.eps))
EPSS2EPSS=$(patsubst %,$(FIGSDIR)/%,$(EPSS:.eps=.eps))
EPSS2PDFS=$(patsubst %,$(FIGSDIR)/%,$(EPSS:.eps=.pdf))
#-----------------------------------------------------
# PDF
#-----------------------------------------------------
PDFS=$(notdir $(wildcard $(FIGSDUMPDIR)/*.pdf))
PDFS2EPSS=$(patsubst %,$(FIGSDIR)/%,$(PDFS:.pdf=.eps))
PDFS2PDFS=$(patsubst %,$(FIGSDIR)/%,$(PDFS:.pdf=.pdf))
#-----------------------------------------------------
# SVGTEX
#-----------------------------------------------------
SVGTEXS=$(notdir $(wildcard $(SVGTEXDIR)/*.svg))
SVGTEXS2PDFS=$(patsubst %,$(FIGSDIR)/%,$(SVGTEXS:.svg=.pdf))
SVGTEX2SEPSS=$(patsubst %,$(FIGSDIR)/%,$(SVGTEXS:.svg=.eps))
#-----------------------------------------------------
# SVG
#-----------------------------------------------------
SVGS=$(notdir $(wildcard $(SVGDIR)/*.svg))
SVGS2PDFS=$(patsubst %,$(FIGSDIR)/%,$(SVGS:.svg=.pdf))
SVGS2SEPSS=$(patsubst %,$(FIGSDIR)/%,$(SVGS:.svg=.eps))
#-----------------------------------------------------




#-----------------------------------------------------
# CONVERSION TO EPS
#-----------------------------------------------------
$(FIGSDIR)/%.eps : $(FIGSDUMPDIR)/%.png
	$(CONVERT) "$<"  EPS3:"$@"

$(FIGSDIR)/%.eps : $(FIGSDUMPDIR)/%.jpg
	$(CONVERT) "$<"  EPS3:"$@"

$(FIGSDIR)/%.eps : $(FIGSDUMPDIR)/%.pdf
	$(PDFTOEPS) "$<" "$@"

$(FIGSDIR)/%.eps : $(FIGSDUMPDIR)/%.eps
	$(LN) "$<" "$@"
	
$(FIGSDIR)/%.eps: $(SVGTEXDIR)/%.svg
	$(SVGTOLATEX) -f "$<" -l "$(FIGSDIR)/$*.tex" -e -o

$(FIGSDIR)/%.eps: $(SVGDIR)/%.svg
	$(SVGTOEPS) "$@" "$<"
	
#-----------------------------------------------------
# CONVERSION TO PDF
#-----------------------------------------------------
$(FIGSDIR)/%.pdf : $(FIGSDUMPDIR)/%.png
	$(CONVERT) "$<" "$@"

$(FIGSDIR)/%.pdf : $(FIGSDUMPDIR)/%.jpg
	$(CONVERT) "$<" "$@"

$(FIGSDIR)/%.pdf : $(FIGSDUMPDIR)/%.eps
	$(EPSTOPDF)  "$<" --outfile="$@"

$(FIGSDIR)/%.pdf : $(FIGSDUMPDIR)/%.pdf
	$(LN) "$<" "$@"
	
$(FIGSDIR)/%.pdf: $(SVGTEXDIR)/%.svg
	$(SVGTOLATEX) -f "$<" -l "$(FIGSDIR)/$*.tex" -o

$(FIGSDIR)/%.pdf: $(SVGDIR)/%.svg
	$(SVGTOPDF) "$@" "$<"






#-----------------------------------------------------
# MAIN COMMANDS
#-----------------------------------------------------
all:allpdf

allpdf:  figspdf pdfall

# $(MASTER).pdf
	
#$(MASTER).pdf $(TEXSRC) $(FIGSRC) $(BIBSRC)


clean :
	@rm -f *.aux *.bbl *.blg *.log *.dvi *.idx *.ilg *.ind *.toc *.lot *.thm *.cb *.cb2 *.gls *.mtc0\
	 *.lof *~ *.bak *.blg *.exa *.adx *.bmt *.mtc *.out *.som *.glo *.glx *.tns *.tpt *.maf *.brf
	
cleansvgs:
	rm -f $(SVGTEXS2PDFS) $(SVGS2PDFS)

figssvg: $(SVGTEXS2PDFS) $(SVGS2PDFS)
	

cleanfigs:
	rm -f $(FIGSDIR)/*


figspdf: $(JPGS2PDFS) $(PNGS2PDFS) $(SVGTEXS2PDFS) $(SVGS2PDFS) $(EPSS2PDFS) $(PDFS2PDFS)

figseps: $(JPGS2EPSS) $(PNGS2EPSS) $(SVGTEXS2EPSS) $(SVGS2EPSS) $(EPSS2EPSS) $(PDFS2EPSS)

fipspng:

figslower:
	for i in figsdump/* ;do ext=`echo $${i#*.}|tr '[:upper:]' '[:lower:]'`; mv "$$i" "$${i%.*}.$$ext";  done

#-----------------------------------------------------
# SEQUENCES
#-----------------------------------------------------
pdf:
	$(PDFLATEX) $(PDFLATEX_FLAGS) $(MASTER)


pdfall:
ifeq ($(USE_PSTRICKS),1)
	@echo "=======================================  PSTRICKS   ================================================"
	$(PS4PDF) $(MASTER).tex
endif
	@echo "=======================================  PDFLATEX1  ================================================"
	$(PDFLATEX) $(PDFLATEX_FLAGS) $(MASTER)
ifeq ($(USE_BIBTEX),1)
	@echo "=======================================    BIBTEX   ================================================"
	$(BIBTEX) $(BIB_FLAGS) $(MASTER)
endif
ifeq ($(USE_MAKEINDEX),1)
	@echo "=======================================  MAKEINDEX  ================================================"
	$(MAKEINDEX) $(MAKEINDEX_FLAGS) $(MASTER)
endif
ifeq ($(USE_MAKEGLOSS),1)
	@echo "=======================================  MAKEGLOSS  ================================================"
	$(MAKEINDEX) $(MAKEGLOSS_FLAGS) -o $(MASTER).gls $(MASTER).glo
endif
	@echo "=======================================  PDFLATEX2  ================================================"
	$(PDFLATEX) $(PDFLATEX_FLAGS) $(MASTER)
	@echo "=======================================  PDFLATEX3  ================================================"
	$(PDFLATEX) $(PDFLATEX_FLAGS) $(MASTER)

   #~ $(LATEX) $(TEX_FLAGS) $(MASTER)
   #~ $(DVIPS) $(DVIPS_FLAGS) -o $(FIGSDIR)/PSTRICKSFIGURES.ps $(MASTER).dvi
   #~ $(PS2PDF) -dAutoRotatePages=/None               pst-pdf-example1-pics.pdf
   #~ $(PDFLATEX) $(PDFLATEX_FLAGS) $(MASTER)


latexquick:
	$(LATEX) $(MASTER)	

latex:
	$(LATEX) $(TEX_FLAGS) $(MASTER)
	$(BIBTEX) $(BIB_FLAGS) $(MASTER)
	$(LATEX) $(TEX_FLAGS) $(MASTER)
	$(LATEX) $(TEX_FLAGS) $(MASTER)





	
#-----------------------------------------------------
# LATEX
#-----------------------------------------------------
# To accomplish 2 compilation we chain from tex->aux->dvi

# To generate a .aux file from a .tex file


# To generate a .dvi file from a .tex file
$(MASTER).dvi :	$(MASTER).aux
	$(LATEX) $(TEX_FLAGS) $<  >/dev/null

# To generate a .ps file from a .dvi file
$(MASTER).ps :$(MASTER).dvi
	$(DVIPS) $(DVIPS_FLAGS) -o $@ $< 
	

#-----------------------------------------------------
# INDEX
#-----------------------------------------------------
index:	$(MASTER).aux $(MASTER).idx $(MASTER).ilg $(MASTER).ind

# To generate a .idx file from a .tex file
%.ilg :	%.idx
	$(MAKEINDEX) $(MAKEINDEX_FLAGS) $(*F)


bibindex : bibtex index
	#makeindex -s bibidx/manuel.ist $(MASTER)
	#makeindex -s bibidx/glossaire.ist $(MASTER).glo -o $(MASTER).glx
	#bibtex $(MASTER)



#-----------------------------------------------------
# HTML Output
#-----------------------------------------------------
html :       $(MASTER).php fipspng

#-----------------------------------------------------
# PDFLATEX
#-----------------------------------------------------
$(MASTER).pdf : $(MASTER).tex
	$(PDFLATEX) $(PDFLATEX_FLAGS) $< 

%.aux :	%.tex
	$(PDFLATEX) $(PDFLATEX_FLAGS) $< 

#-----------------------------------------------------
# BIBTEX
#-----------------------------------------------------
%.bbl : %.tex
ifneq ($(strip $(BIBSRC)),)
	echo "Here"
	$(BIBTEX) $(BIB_FLAGS) $(*F)
endif






# Dependencies
#$(MASTER).tex : $(TEXSRC) $(FIGSRC) 
#$(MASTER).aux : $(TEXSRC) $(FIGSRC) $(BBLSRC)
#$(MASTER).bbl : $(BIBSRC) $(MASTER).aux
#$(MASTER).pdf : $(MASTER).aux $(TEXSRC) $(FIGSRC) $(BBLSRC) $(BIBSRC)
#$(MASTER).dvi : $(TEXSRC) $(FIGSRC)  $(BBLSRC)








Emmanuel Branlard