Настройка include-guard для Eclipse CDT
Я хочу автоматически сгенерировать include-guard, создав новый класс C++ с Eclipse/CDT, но я не нахожу способа изменить ${include_guard_symbol}
приписывать.
Мое желание - это include-guard с префиксом пространства имен, например:
#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP
Но если я использую #ifndef ${namespace_name}_${include_guard_symbol}
для этого он будет производить:
namepace1::namespace2::_HEADER_HPP
Как я могу это сделать?
2 ответа
Я покопался в источнике CDT и нашел недокументированную настройку предпочтений, которую можно использовать для изменения того, что генерируется ${include_guard_symbol}
, Там также нет GUI для этого, но если вы добавите codetemplates.includeGuardGenerationScheme
установка на <projectpath>/.settings/org.eclipse.cdt.ui.prefs
, вы можете выбрать между именем файла (по умолчанию), путем к файлу или UUID.
Учитывая файл <projectpath>/src/include/Class.h
следующие значения дают эти результаты:
- 0 дает имя файла в верхнем регистре, т.е.
CLASS_H_
- 1 дает UUID, например.
HC9ABE718_D04E_411C_B5A2_F9FE1D9F9409
- 2 дает путь к файлу в верхнем регистре, то есть
SRC_INCLUDE_CLASS_H_
Чтобы избежать каких-либо сомнений, вот содержание нашего .settings/org.eclipse.cdt.ui.prefs
:
codetemplates.includeGuardGenerationScheme=2
eclipse.preferences.version=1
formatter_settings_version=1
Это, очевидно, не совсем то, что вы ищете, но мы используем 2
чтобы дать нам приближение наших пространств имен, так как, вообще говоря, наши пространства имен следуют нашей структуре папок.
Соответствующий код находится в этих файлах в источнике CDT:
core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java
для констант для каждого вариантаcore/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/codemanipulation/StubUtility.java
дляgenerateIncludeGuardSymbol()
метод, который делает работу.
Было бы очень приятно увидеть дополнительную опцию для использования пространства имен и графический интерфейс.
Я использую Eclipse Oxygen (CDT 9.3) и, как Eelke описал в своем комментарии, некоторое время назад для этого была настройка пользовательского интерфейса.
Однако он позволяет вам выбирать только из предустановленных схем, пока нет доступных пространств имен или более широких возможностей настройки.
Найдите "охранник" в диалоговом окне настроек или перейдите к C/C++ > Стиль кода> Стиль имени и выберите "Код"> "Включить защиту", а затем выберите одну из доступных схем защиты.