Eclipse CDT — предварительно скомпилированный заголовок

Я ищу прямой способ использования скомпилированных заголовков для проекта C ++ с использованием Eclipse / CDT. Все работает при запуске из командной строки, но я ищу простой способ интегрировать его в Eclipse.

Какие-либо предложения ?!

4

Решение

Из того, что я видел, в настоящее время Eclipse CDT не поддерживает предварительно скомпилированные заголовки напрямую. Я имею в виду, вы не можете установить опцию, например: «Для этого заголовка, скомпилируйте его». То же самое относится и к заголовкам внешних библиотек вашего проекта Eclipse.

Как вы знаете, вам нужно установить тот же флаг компилятора для компиляции заголовка, чтобы компилятор использовал его для другого модуля компиляции. (По крайней мере, в случае GCC).

Итак, у вас есть несколько решений:

  • Замените команду сборки по умолчанию, которая находится в разделе «Свойства для -> Сборка C / C ++ -> Настройки компоновщика -> Команда сборки», на собственный скрипт, который изменит make-файлы, сгенерированные eclipse, а затем вызовет make. Рубиновое решение предлагается Вот. Обратите внимание, что он не позволяет использовать несколько предварительно скомпилированных заголовков.
  • Ты можешь использовать CCache вместо использования GCC. Он определяет, когда та же самая компиляция выполняется снова, поэтому он немного отличается от использования предварительно скомпилированных заголовков.

РЕДАКТИРОВАТЬ :

Чтобы заставить работать скрипт ruby, вам нужно иметь хотя бы один файл .cpp внутри той же директории, что и ваш заголовочный файл. В противном случае вы получите ошибку в отсутствующем файле «subdir.mk».

1

Другие решения

Другой подход заключается в создании исходного файла (например, pch.cpp) с измененными настройками сборки для создания предварительно скомпилированного заголовка. Он должен быть включен в сборку для создания предварительно скомпилированного заголовка, а затем исключен для построения окончательного исполняемого файла. Он должен быть временно повторно включен, если файл заголовка изменен.

Этот сайт предоставляет больше подробностей, в том числе способ создания различных предварительно скомпилированных заголовков для каждой конфигурации сборки.

1

Рассмотреть возможность использования CMake а также cotire

0

Просто чтобы помочь другим, кто может наткнуться на это (так как я потратил некоторое время на выяснение этого)

Первое, что нужно сделать, — это создать папку PCH (если хотите) с файлами pch.cpp и pch.h.

pch.cpp: (этот файл предназначен для компиляции .gch)

#include "pch.h"

pch.h:

#include <iostream>
#include <string>
// more stuff that's not changing anytime soon...

Второе, что нужно сделать, это создать конфигурацию сборки PCH.

исключить все исходные файлы вашего проекта из этой сборки. (нам нужно только скомпилировать pch.cpp)
выберите файлы / папки> щелкните правой кнопкой мыши> конфигурации ресурсов> исключить из сборки> PCH

Теперь нам нужно сделать его скомпилированным как .gch (предварительно скомпилированный заголовок)
pch.cpp> Щелкните правой кнопкой мыши> Свойства> Сборка C / C ++> Настройки> Настройки инструмента
Компилятор> Шаблон: ${COMMAND} ${FLAGS} ${INPUTS} (удалить все выходные данные)
Разное> Флаги: -c -x c++-header -o "../src/PCH/pch.h.gch"

Теперь, когда вы строите с этой конфигурацией, он создаст pch.h.gch, где находится pch.h.
(это также даст бессмысленную ошибку при попытке создать exe. просто игнорируйте это)


Вернемся к нормальной сборке Release, исключите pch.cpp, так как вам не нужно это компилировать.

Теперь пришло время проверить, что .gch используется поверх .h

наверху чч #error "not using precompiled header file"

.Ghc используется только в том случае, если заголовок включен первым в файл компиляции.

«В конкретной компиляции может использоваться только один предварительно скомпилированный заголовок».

Вы должны предварительно скомпилировать различные варианты заголовков, которые лучше всего подходят для разных модулей компиляции


КОМПЛЕКСНЫЕ ИСПЫТАНИЯ

без предварительно скомпилированных заголовков
took 34s.189ms output src=2,143,078 bytes exe=1,346,864 bytes

с -include ../src/PCH/pch.h (включается в каждую единицу компиляции) (только pch.h, а не .gch)
took 48s.364ms output src=2,159,431 bytes exe=1,355,298 bytes
(именно поэтому мы #include вручную, где это необходимо, поэтому для компиляции без .gch все равно потребуется около 34 с)

с -include ../src/PCH/pch.h и pch.h.gch (быстрая компиляция, но по-прежнему неэффективна с -include)
took 22s.535ms output src=2,159,431 bytes exe=1,355,298 bytes

если pch’s организованы / используются правильно (правильный выбор заголовков и файлов для их включения) (не используется в каждом файле), это должно быть намного быстрее, чем 22 с. (этот тест был сделан только для проекта, который не был создан с учетом требований pch)


дополнительное ускорение, которое может утроить время компиляции
Проект> Свойства> Сборка C / C ++> Поведение> Включить параллельную сборку

0
По вопросам рекламы [email protected]