Включить всю библиотеку шаблонов в файл - PullRequest
1 голос
/ 26 декабря 2011

Поздно я тоже использовал некоторые библиотеки шаблонов, такие как Boost и Thrust (для CUDA), в некоторых моих работах по программированию.

Для использования определенной функции библиотеки Boost необходимо включить соответствующий header.e.g. для boost::lexical_cast я должен использовать boost/lexical_cast.hpp. Утомительно продолжать включать соответствующий заголовок для каждой новой функции Boost / Thrust, которую я использую для своих проектов.

Есть ли какой-либо "ярлык", чтобы сказать препроцессору включить все файлы заголовков, хранящиеся в библиотеке надстроек, чтобы мне не пришлось беспокоиться о том, какой файл заголовков включить?

Я использую GCC под Ubuntu.

Ответы [ 2 ]

6 голосов
/ 26 декабря 2011

Ты не хочешь этого. Вы хотите включить как можно меньше. Время компиляции ужасно в C ++ как есть. Начните включать все везде, и будет еще хуже.

Я работал над проектом, где компиляция на приличном одноядерном процессоре занимала 50 минут, связывая 5-10 минут. Это очень больно, если вы занимаетесь шаблонами глубоко в фундаменте.

Boost поставляется с кучей вещей (например, MPL), которые расширяют компилятор до пределов. Было бы безумно включать этот материал везде (кроме проекта с пятью cpp-файлами).

2 голосов
/ 26 декабря 2011

Вы можете просто создать исходный файл заголовка для всех:

for i in $(find /usr/include/boost/); do echo "#include <"${i/"/usr/include/"/}">"; done > master_header.hpp

Теперь вы можете добавить это и использовать предварительно скомпилированные заголовки (вам может понадобиться ночная компиляция для создания PCH). Вы также должны передать компоновщику -Wl,-as-needed, чтобы не включать ненужные библиотеки.

Как говорит @sbi, это ни в коей мере не рекомендуется, но, поскольку вы спросили ... иногда лучшее средство против нахождения чего-то "утомительного" - это посмотреть, насколько хуже это может быть!

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