как создать make-файл с несколькими подкаталогами - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть один каталог и под ним 4 подкаталога, например:

myDir:
myDir/Part1
myDir/Part2
myDir/Part3
myDir/shared

Я хочу создать исполняемый файл, который берет файлы из общего ресурса, связывает его с файлами в части 2 и помещает исполняемый файл в myDir.

Это то, что я пробовал (только соответствующие строки в make-файле):

Shared/helper.o:
gcc -ansi -pedantic-errors -c -Wall -Werror -g -o Shared/helper.o Shared/helper.c

и выше в make-файле:

Part2/part2code.o: ../Shared/helper.o
gcc -ansi -pedantic-errors -c -Wall -Werror -g -o Part2/part2code.o Part2/part2code.c

и над ним в make-файле:

part2code: Part2/part2code.o  ../Shared/helper.o
gcc -ansi -pedantic-errors -Wall -Werror -g -lm -o part2code Part2/part2code.o  ../Shared/helper.o

(я тоже пробовал без ../ до Shared)

Я получаю эту ошибку:

No such file or directory.

помощь

Спасибо!

1 Ответ

2 голосов
/ 24 апреля 2011

В этом контексте все пути в именах файлов зависят от того, где находится make-файл. Так, например Part2/part2code.o: ../Shared/helper.o неверно; это должно быть просто Part2/part2code.o: Shared/helper.o (и так далее). Также обратите внимание, что вы написали Shared в вашем make-файле, но вы указали каталог как shared ...

Хотя на самом деле это все-таки неправильно. Правила, такие как a: b, выражают, что b является обязательным условием из a; то есть, что вы не можете сделать a, пока не сделаете b. Это не относится к вашим объектным файлам; они не зависят друг от друга. Обычно объектный файл зависит исключительно от входящих в него исходных файлов (*.c и *.h). Так, например, ваше правило для part2code.o может выглядеть примерно так:

Part2/part2code.o: Part2/part2code.c
    gcc -ansi -pedantic-errors -c -Wall -Werror -g -o $@ $^

(Обратите внимание на использование специальных переменных $@ и $^, которые заменяют цели и предварительные условия соответственно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...