Автоматическое создание каталогов при сборке - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть проект, написанный на C, и я использую mercurial (я тоже могу использовать git) для контроля версий и GNU make для сборки. Проект включает в себя несколько пустых каталогов, используемых для файлов, создаваемых во время сборки, таких как make-файлы зависимостей и объектные файлы.

Однако, когда я извлекаю проект, пустые каталоги не создаются (они игнорируются системой контроля версий), и сборка завершается неудачно.

Единственное средство, которое я имею в виду, - это добавить директиву mkdir -p в каждый рецепт в 58 make-файлах проекта (это довольно много). Помимо большого объема редактирования, mkdir -p не рекомендуется в руководстве GNU make за его несовместимость с другими версиями make.

Есть ли более разумный способ преодолеть проблему?

Ответы [ 3 ]

3 голосов
/ 22 февраля 2011

Вы можете иметь:

output/%: output/.empty

output/.empty:
        $(MKDIR_P) output
        touch output/.empty

в make-файле.Чем все файлы в output будут зависеть от создания каталога без изменения каждого правила в отдельности.

Может быть предоставлено определение $(MKDIR_P) (mkdir -p для большинства систем или специальный скрипт, который не работает)по сценарию конфигурации (например, autoconf с использованием AC_PROG_MKDIR_P) или условной настройке в make-файле.

3 голосов
/ 22 февраля 2011

Файлы треков git и Mercurial, а не каталоги, поэтому пустые каталоги не будут храниться.

Обычный прием - просто добавить пустой файл в нужные вам каталоги, например:

touch output/.empty

А затем добавьте это в хранилище.

1 голос
/ 22 февраля 2011

Поскольку вы упоминаете, что вы также можете использовать git, возможно, вас заинтересует тот факт, что bazaar может отслеживать каталоги так же, как и для файлов. Я не знаю, если это вариант для вас, просто говорю.

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