2012-05-14 2 views
1

У меня есть следующие сделать файлКак связать файлы в разных папках, созданных путем вызова нескольких файлов make?

all: XmlNode.o y.tab.o y.tab.o lex.yy.o 
    gcc -g -o prog y.tab.o lex.yy.o XmlAttributeNode.o XmlNode.o -ll -ly -lm 

XmlNode.o: 
    cd XmlNode; make 
y.tab.o: y.tab.c 
    gcc -g -c y.tab.c 
lex.yy.o: lex.yy.c 
    gcc -g -c lex.yy.c 
y.tab.c: LexYacc/prog1.y 
    bison -y -dv LexYacc/prog1.y 
lex.yy.c: LexYacc/prog1.l 
    lex -l LexYacc/prog1.l 

clean: 
    rm -f y.tab.* lex.yy.* *.o prog 

XmlAttributeNode.o и XmlNode.o сделаны в папке XmlNode, таким образом, я получаю ошибку

gcc: XmlAttributeNode.o: No such file or directory 
gcc: XmlNode.o: No such file or directory 

Я посмотрел на следующие вопросы 1, 2 и 3, но я не могу найти, как я могу получить список всех файлов .o, созданных XmlNode.o, поэтому 1) мне не нужно вводить их вручную, а 2) правильный путь включен, поэтому gcc может найти файлы .o. Так что-то вроде этого:

XmlNode.o: 
    cd XmlNode; XmlNodeList = .o files from this make; XmlPath = `pwd`; 

, а затем:

all: XmlNode.o y.tab.o y.tab.o lex.yy.o 
    gcc -g -o prog y.tab.o lex.yy.o XmlPath/XmlNodeList -ll -ly -lm 

Любая помощь будет оценена.

+1

Вы читаете [Рекурсивный взгляд считается вредным] (http://miller.emu.id.au/pmiller/books/rmch/)? –

+0

Кажется, полезной информации спасибо. – mihajlv

+0

Итак ... в правиле 'XmlNode.o' вы хотите запустить Make в' XmlPath/', используя' XmlPath/Makefile', который будет создавать несколько файлов .o в 'XmlPath /', а затем вы хотите использовать список этих файлов в главном make-файле? – Beta

ответ

1

Предполагая, что информация в комментариях, это, по крайней мере, будет работать.

all: XmlNode.o y.tab.o y.tab.o lex.yy.o 
    gcc -g -o prog y.tab.o lex.yy.o XmlNode/XmlAttributeNode.o XmlNode/XmlNode.o -ll -ly -lm 

XmlNode/XmlAttributeNode.o XmlNode/XmlNode.o: 
    cd XmlNode; make 
y.tab.o: y.tab.c 
    gcc -g -c y.tab.c 
lex.yy.o: lex.yy.c 
    gcc -g -c lex.yy.c 
y.tab.c: LexYacc/prog1.y 
    bison -y -dv LexYacc/prog1.y 
lex.yy.c: LexYacc/prog1.l 
    lex -l LexYacc/prog1.l 

clean: 
    rm -f y.tab.* lex.yy.* *.o prog; cd XmlNode; make clean