如何在Eclipse中使用大写文件路径获得$ {include_guard_symbol}?

时间:2012-10-19 13:56:43

标签: c++ eclipse eclipse-cdt

Eclipse CDT中定义代码模板时,我们可以使用名为${include_guard_symbol}的变量转换为MYFILE_H

我希望有更明确的内容:SRC_MYFOLDER_MYFILE_H

我按照an answer to Stack Overflow question Customizing include-guard for Eclipse CDT中给出的步骤操作,但我得到的只是${include_guard_symbol}返回一个空字符串!我还在Stack Overflow上看到了关于adding the namespace to the include guard的其他相关问题,但这不是我想要的。

我使用的是Eclipse版本3.5.2和CDT版本6.0.2。

是否有另一种方法可以达到预期效果?

3 个答案:

答案 0 :(得分:4)

我安装的最旧版本是3.7,我在那里和4.2上进行了测试,referenced link完全符合OP的要求。 (OP正在使用3.5.2)。对于今后来这里的人来说,这里是步骤

  1. 退出Eclipse
  2. 导航到您的工作区文件夹,然后继续导航到\.metadata\.plugins\org.eclipse.core.runtime\settings
  3. 我总是喜欢在制作mods之前备份设置文件夹
  4. 将名为org.eclipse.cdt.ui.prefs的文件加载到文本编辑器
  5. 添加此行(我将我的第3行放入)中 codetemplates.includeGuardGenerationScheme=2
  6. 保存文件。
  7. 重启eclipse
  8. 我在src文件夹下创建了一个名为MyFolder的文件夹。然后我右键单击并添加了一个新的头文件,结果是:

    #ifndef SRC_MYFOLDER_TEST_H_
    #define SRC_MYFOLDER_TEST_H_
    
    #endif /* SRC_MYFOLDER_TEST_H_ */
    

答案 1 :(得分:0)

主要观点:How to customize eclipse CDT code templates

一种解决方案是将${include_guard_symbol}全部放在模板中,自己定义,可能使用其他一些预定义变量。像这样:

${filecomment}

#ifndef MyProject_${file_base}_h
#define MyProject_${file_base}_h

${typecomment}
${declarations}

#endif /* MyProject_${file_base}_h */

因此,对于名为inc / Foo.h的头文件,include guard将按如下方式插入:

#ifndef MyProject_Foo_h
#define MyProject_Foo_h

不幸的是,似乎还没有一种方法可以自定义。例如,如果我定义了一个嵌套在命名空间中的类,我可能希望将命名空间作为include guard的一部分。我目前在eclipse中找不到办法做到这一点。

答案 2 :(得分:0)

不是你的问题的答案,但我想建议一个替代方案。包含保护提供了一种工作的,尽管粗略的方式来禁止每个编译单元不止一次包含头文件中的代码。作为替代方案,您可以使用

#pragma once

编译器指令。我意识到它没有在标准中定义,但它得到了许多编译器的支持,包括GNU,Clang,MSVC和Intel。如果你使用#pragma once,你就会失去很小的可移植性,并且你避免了名字冲突,我认为这是你想要首先改变${include_guard_symbol}的原因。

您也可以查看http://en.wikipedia.org/wiki/Pragma_once进行更全面的讨论。