为Eclipse CDT定制include-guard

Dud*_*ero 15 customization eclipse-cdt include-guards

我希望通过使用Eclipse/CDT创建一个新的C++类来自动生成include-guard,但是我找不到任何改变${include_guard_symbol}属性的方法.

我的愿望是带有名称空间前缀的include-guard,如下所示:

#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP
Run Code Online (Sandbox Code Playgroud)

但如果我使用#ifndef ${namespace_name}_${include_guard_symbol}它,它将产生:

namepace1::namespace2::_HEADER_HPP
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Dav*_*e E 15

我在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
Run Code Online (Sandbox Code Playgroud)

它显然不完全是你所追求的,但我们用它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()完成工作的方法.

很高兴看到为使用命名空间添加了额外的选项,以及GUI.

  • 在CDT 8.5(可能更旧)首选项> C/C++>代码样式>名称样式中,然后在名称类别框中选择代码>包含防护,这将显示此答案中提到的三个选项.仍然没有命名空间选项:( (2认同)