Включити файли заголовків за допомогою опції командного рядка?


80

Чи можна вказати додаткові файли заголовків для включення з командного рядка (за допомогою GCC 4 / C ++)?

Або є інший спосіб включення файлів, окрім #include?

Передумови: Я намагаюся скласти велику базу коду на своєму власному ПК. Код зазвичай компілюється в кластері зі складною системою збірки (SoftRelTools хто-небудь?), Яка переплітається з операційною системою, так що встановити його десь десь практично неможливо (буквально сотні make-файлів та сценаріїв оболонки, і важко закодовані шляхи до мережевих дисків). Однак фактичний код досить простий і компілюється нормально, АЛЕ йому бракує багатьох включень (здебільшого а-ля " include <vector>" та " include <math.h>"). Я здогадуюсь, що система побудови зазвичай про це дбає, але мені доводиться переглядати код і додавати включення вручну, чого я волію уникати.

Відповіді:


88

Я знайшов параметр -include. Це те, що ти хочеш?

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

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

Якщо вказано кілька варіантів -include, файли включаються в тому порядку, в якому вони з’являються в командному рядку.


8
FYI - функція "Включити" в основному призначена для підтримки попередньо скомпільованих заголовків. Таким чином, ви можете вставити ваш .pch-файл у всі вихідні файли, не редагуючи кожен.
gavinb

4
Дякую! Хоча я робив RTFM (M = manpage), я це пропустив. Я також думав, що PCH - це лише функція Visual C ++ ... але, схоже, саме це вони використовували в системі складання ...
jdm

1
відповідним аргументом командного рядка для Visual C * буде /FI, на всякий випадок, якщо комусь доведеться портувати збірки, які використовують це.
PypeBros

щось подібне для #include <file> (кутові дужки)? якщо бути детальнішим, я зацікавлений у підтримці
дзвінків

Фантастичний. @gavinb Я використовував це для простого випадку використання, коли мені потрібно було доповнити деякі заголовки libc кількома заміненими функціями та / або розширеннями мого коду libc. Весь мій код все ще може використовувати стандартні заголовки для прототипів, але також наполегливо включає деякі додаткові визначення, які мені потрібні, щоб вони працювали на моїй платформі.
sherrellbc

30

З посібника GCC:

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

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

Якщо вказано кілька варіантів -include, файли включаються в тому порядку, в якому вони з’являються в командному рядку.


11

Відповідно до документації gcc, перемикач командного рядка "-include file" виконує цю роботу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.