Hoi
Ik ben bezig met een opdracht waar ik een makefile voor een simpele parser moet schrijven, en ik heb het op zich prima werken maar wil graag pattern rules oid gebruiken ipv de lompe-henkie-methode die ik nu toepas.
Dit moet de makefile doen:
Nu heb ik dat netjes in de volgende makefile samen weten te vatten:
Ik wil deze code eigenlijk beter maken, omdat ik hier gewoon alles heb uitgeschreven, en dat kan toch niet de bedoeling zijn he. Nu heb ik het idee dat dat op 2 manieren kan, en beide heb ik getest:
1: een OBJECTS variabele declareren :
En dan als deps voor interpreter ${OBJECTS} opgeven.
Hij lijkt helemaal niets meer met dependencies te doen echter?
2: Dmv pattern rules:
Hier had ik het probleem dat een aantal van de C files nog niet uit de lex\bison files is gegenereerd en daardoor failt.
Weet iemand waar dit fout gaat, en hoe ik dit het mooiste op kan lossen?
Ik ben bezig met een opdracht waar ik een makefile voor een simpele parser moet schrijven, en ik heb het op zich prima werken maar wil graag pattern rules oid gebruiken ipv de lompe-henkie-methode die ik nu toepas.
Dit moet de makefile doen:
code:
1
2
3
4
5
6
7
8
9
10
11
| #! /bin/sh bison -o parser.c parser.y -d gcc -c parser.c gcc -c main.c flex -olexer.c lexer.l gcc -c lexer.c gcc -c print.c gcc -c abstract.c gcc -c eval.c gcc main.o parser.o lexer.o print.o abstract.o eval.o -o interpreter |
Nu heb ik dat netjes in de volgende makefile samen weten te vatten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| CC=gcc LEX=flex BISON=bison CSOURCES=*.c OBJECTS=$(CSOURCES:.c=.o) all: interpreter clean: rm *.o rm parser.c lexer.c parser.c: parser.y ${BISON} -o parser.c parser.y -d parser.o: parser.c ${CC} -c parser.c main.o: main.c config.h eval.h print.h parser.h ${CC} -c main.c lexer.c: lexer.l abstract.h parser.h ${LEX} -olexer.c lexer.l lexer.o: lexer.c ${CC} -c lexer.c print.o: print.h abstract.o ${CC} -c print.c abstract.o: ${CC} -c abstract.c abstract.h eval.o: eval.c eval.h abstract.o ${CC} -c eval.c interpreter: main.o parser.o lexer.o print.o abstract.o eval.o ${CC} main.o parser.o lexer.o print.o abstract.o eval.o -o interpreter |
Ik wil deze code eigenlijk beter maken, omdat ik hier gewoon alles heb uitgeschreven, en dat kan toch niet de bedoeling zijn he. Nu heb ik het idee dat dat op 2 manieren kan, en beide heb ik getest:
1: een OBJECTS variabele declareren :
code:
1
2
| SOOURCES=*.c OBJECTS=$(SOURCES:.c=.o) |
En dan als deps voor interpreter ${OBJECTS} opgeven.
Hij lijkt helemaal niets meer met dependencies te doen echter?
2: Dmv pattern rules:
code:
1
2
| %.o: %.c $(CC) -c $(input) -o $(output) |
Hier had ik het probleem dat een aantal van de C files nog niet uit de lex\bison files is gegenereerd en daardoor failt.
Weet iemand waar dit fout gaat, en hoe ik dit het mooiste op kan lossen?