Создание квадрата #include - PullRequest
       14

Создание квадрата #include

0 голосов
/ 31 марта 2010

Я пытаюсь написать make-файл, используя CC на Solaris 10. [Думаю, только первый бит имеет значение]. У меня есть следующее правило для foo.o:

foo.o: foo.cc common_dependencies.h
    CC -c foo.cc -I../../common

К сожалению, common_dependencies.h включает в себя все виды уникальных мусоров, в каталогах, не называемых '.' или "../../common". Это просто должен быть сборочный файл с грубой силой, где я разыскиваю все пути зависимости? Все зависимости находятся где-то под «../ ..», но иногда на 1 уровень ниже, а иногда на 2 уровня.

-Спасибо Нилу

Ответы [ 3 ]

0 голосов
/ 31 марта 2010

Эта проблема в целом довольно подлая. Существует множество соглашений для организации проекта плюс инструменты для помощи (autoconf и аналогичные), но если автор не воспользовался этими вещами, вам придется искать все и самостоятельно устанавливать -I. .

Вы можете использовать gcc -M или makedepends или один из множества подобных инструментов, чтобы получить список необходимых каталогов. Предположительно, вы могли бы даже написать сценарий извлечения.

0 голосов
/ 31 марта 2010

На самом деле не очень хорошая идея указывать путь в директиве #include; он делает заголовок - и все, что от него зависит - зависит от конкретной структуры каталогов. Стоит выяснить, разрешено ли вам очищать файл common_dependencies.h.

Если пути в common_dependencies.h верны, ваш Makefile будет работать как есть (хотя я бы рекомендовал использовать абсолютный путь, а не "../ .."), и вы можете использовать что-то вроде Расширенное автоматическое создание зависимостей для обработки зависимостей для вас.

Если пути в common_dependencies.h не верны, тогда да, вам нужно будет найти каждый файл, который он #include, и зная, где они находятся, будет недостаточно . Если он #include файла с ложным путем, компиляция завершится сбоем, даже если компилятор имеет -Ithe_correct_path, поэтому вам придется либо исправить common_dependencies.h, либо изменить структуру каталога (путем перемещения, копирования или ссылки на файлы) .

0 голосов
/ 31 марта 2010

Как правило, если заголовочные файлы являются общими для исходных файлов в нескольких каталогах, они хранятся в дереве include/ под корнем проекта, а затем вы используете что-то вроде -I$(TOPDIR)/include, чтобы добавить дерево включения к пути включения и пусть ваши исходные файлы извлекаются include/foo/bar.h примерно так:

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