I want an automatically generated include-guard by creating a new C++-class with Eclipse/CDT, but I don't find any way to change the ${include_guard_symbol}
attribute.
My wish is an include-guard with a namespace prefix like following:
#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP
But if I use #ifndef ${namespace_name}_${include_guard_symbol}
for this, it will produce:
namepace1::namespace2::_HEADER_HPP
How can I do this?
I'm using Eclipse Oxygen (CDT 9.3) and as Eelke described in their comment, there has been a UI setting for this for a while now.
However it only lets you choose from the preset schemes, no namespace or richer customisation options available yet.
Search for 'guard' in the preferences dialog, or navigate to C/C++ > Code Style > Name Style and select Code > Include Guard and then choose from the available guard schemes.
I had a dig around in the source for CDT, and found an undocumented preference setting you can use to change what is generated by
${include_guard_symbol}
. There's no GUI for it either, but if you add thecodetemplates.includeGuardGenerationScheme
setting to<projectpath>/.settings/org.eclipse.cdt.ui.prefs
, you can choose between file name (the default), file path or UUID.Given the file
<projectpath>/src/include/Class.h
, the following values give these results:CLASS_H_
HC9ABE718_D04E_411C_B5A2_F9FE1D9F9409
SRC_INCLUDE_CLASS_H_
To avoid any doubt, here's the contents of our
.settings/org.eclipse.cdt.ui.prefs
:It's obviously not exactly what you're after, but we use
2
to give us an approximation of our namespaces since, generally speaking, our namespaces follow our folder structure.The relevant code is in these files in the CDT source:
core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java
for the constants for each optioncore/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/codemanipulation/StubUtility.java
for thegenerateIncludeGuardSymbol()
method that does the work.It would be really nice to see an extra option added for using the namespace, and a GUI too.