set stack limit: ulimit -s BYTE
:> make -f makefile
:> Parser/debug/ParserTest TestFile/Parser/fib.txt ../a 2> ../error.log
Das Projekt wurde in 4 Teilprojekte aufgeteilt:
- Automat
- Buffer
- Symboltabelle
- Scanner
Jedes Teilprojekt hat die Verzeichnisstruktur:
- src enthaelt den Source-Code
- includes enthaelt die Headerfiles
- objs enthaelt die Objektfiles, die notwenig fuer das Gesamtprojekt sind
- debug enthaelt die Objektfiles und das ausfuehrbare File zum Testen des Teilprojekts
Jedes Teilprojekt enthaelt ein eigenes Makefile und eine eigene Main-Klasse, um die Funktionalitaet zu testen.
Makefiles werden benoetigt, um das Compilieren und Linken automatisiert durch das Tool make ausfuehren zu lassen.
Level: ohne Makefile Kenntnisse Im Makefile im Teilprojekt Automat sind alle Schritte zum Compilieren und Linken ausfuehrlich aufgelistet.
Level: wenig Makefile-Kenntnisse Im Makefile im Teilprojekt Buffer werden die benoetigten Verzeichnisse ueber Variablen definiert.
Level: gute Makefile-Kenntnisse Im Makefile im Teilprojekt Symboltable und Scanner wird auch die Liste der zu compilierenden Files ueber Variablen deklariert.
Aufbau des Makefiles: Definition der Variablen Targets zum Bauen des Tests, Targets sind Sprungziele, die durch make ausgefuehrt werden können
Im Terminalfenster können die targets so aufgerufen werden: make target
In der Eclipse View "Make Targets" erscheinen die Targets der einzelnen Makefiles, die dann mit einem Doppelklick ausgefuehrt werden können.
Aufbau der Targets
- target: dependencies
- [tab] system_command
classA.o: classA.cpp classA.h [tab] g++ -c -g classA.cpp -o classA.o
- target classA.o ist abhaengig von der Source Datei classA.cpp und classA.h
- g++ Compiler Aufruf
- das File classA.cpp wird nur compiliert (-c) und in das Outputfile (-o) classA.o geschrieben
classB.o: classB.cpp classB.h classA.h [tab] g++ -c -g classB.cpp -o classB.o
- target classB.o ist abhaengig von der Source Datei classB.cpp, classB.h und classA.h
- g++ Compiler
- das File classB.cpp wird nur compiliert (-c) und in das Outputfile (-o) classB.o geschrieben
- my_program: classA.o classB.o
- g++ -g classA.o classB.o -o my_program
- target my_program ist abhaengig von den Objektdateien classA.o und classB.o
- g++ Linker
options: -c Kompilieren ohne zu linken. -g debugging infos erzeugen -o file object-file name
http://www.gnu.org/software/make/
http://mrbook.org/blog/tutorials/make/
http://de.wikipedia.org/wiki/Make
http://www.sethi.org/classes/cet375/lab_notes/lab_04_makefile_and_compilation.html