Включить один заголовочный файл в каждый исходный файл - PullRequest
4 голосов
/ 30 марта 2012

Скажем, у вас есть сотни файлов исходных файлов (.c или .cpp), и вы хотите включить некоторые определения, объявления функций / переменных в каждое из них. Обычно в C / C ++ для этой цели вы используете файлы заголовков. Но в этом случае вам нужно поместить #include "header.h" в каждый исходный файл.

Теперь мой вопрос: есть ли способ включить один заголовок для всех файлов, не помещая #include "header.h" в каждый файл, потому что будет очень утомительно писать #include "header.h" для сотен исходных файлов.

Ответы [ 4 ]

9 голосов
/ 30 марта 2012

Вы можете использовать флаг -include для clang или GCC. Из справочной страницы :

-включить файл

Обрабатывать файл , как если бы "#include "file"" появилось в качестве первой строки первичного исходного файла. Однако первым каталогом, в котором был найден файл file , является рабочий каталог препроцессора вместо каталога, содержащего основной исходный файл. Если он там не найден, его ищут в оставшейся части цепочки поиска "#include "..."" как обычно.

Если задано несколько параметров -include , файлы включаются в порядке их появления в командной строке.

Пример: * * тысяча двадцать-восемь

clang -include header.h -c file1.c
clang -include header.h -c file2.c
clang -include header.h -c file3.c
clang -o app file1.o file2.o file3.o

MSVC имеет флаг /FI , который аналогичен.

4 голосов
/ 30 марта 2012

Да, это было бы утомительно.Вот почему вы используете оболочку ...

Следующее мистическое заклинание сделает то, что вы просите, несколькими нажатиями клавиш!

find ./ -name "*.c" -or -name "*.cpp" | xargs -n 1 sed -i '1 i #include <my_header.h>'

Поклонитесьмогущественная сила юникса, язычников ...

1 голос
/ 30 марта 2012

Вы не можете этого сделать, хотя вы могли бы написать скрипт для вас.Сценарий, который берет каждый файл и пишет #include "header.h" вверху. Edit: -include в gcc делает это.

Однако то, что вам нужно, можно достичь другим способом с помощью параметров компилятора.В gcc с -D.

Допустим, вы хотите определить DEBUG_LEVEL в 2 во всех ваших исходных файлах.Вы можете просто сделать это, вызвав gcc следующим образом:

gcc -DDEBUG_LEVEL=2

Обратите внимание, что в этом случае вам нужно будет перестроить весь ваш проект (что было бы сделано в любом случае, если бы вы изменили это определение в заголовке 1).файл, от которого зависят ВСЕ исходные файлы)

0 голосов
/ 30 марта 2012

Заголовочные файлы не являются определениями - они являются декларациями.

Вы вносите как можно меньше - сохраняете работу компилятора, а также взаимозависимости.

Вы можете даже уменьшить число дальшеиспользуя предварительные объявления в этих заголовочных файлах.

Если вы сообразительны, вы можете заставить свою IDE помочь вам заполнить пробелы вместо того, чтобы наносить урон пальцам.

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