当CLion创建头文件时,它会添加类似这样的包含保护字符串:
#ifndef PROJECTNAME_FILENAME_H
#define PROJECTNAME_FILENAME_H
/* ... code ... */
#endif //PROJECTNAME_FILENAME_H
我只想要FILENAME_H
,而不要PROJECTNAME_
前缀。如何在CLion设置中更改?
当CLion创建头文件时,它会添加类似这样的包含保护字符串:
#ifndef PROJECTNAME_FILENAME_H
#define PROJECTNAME_FILENAME_H
/* ... code ... */
#endif //PROJECTNAME_FILENAME_H
我只想要FILENAME_H
,而不要PROJECTNAME_
前缀。如何在CLion设置中更改?
虽然回答有点晚,但我有一个更为复杂的解决方案,可以处理任何文件扩展名,而无需手动后处理:
+
创建一个新的包含模板。将名称命名为IncludeGuard
,并将扩展名设置为h
。#macro( includeGuard $filename $ext )
#set( $ucfull = ${filename.toUpperCase().replace('-', '_')} )
#set( $extidx = ${ucfull.lastIndexOf(".")} )
#set( $extstart = $extidx + 1 )
#if( $extidx > -1 )
#set( $ucname = ${ucfull.substring(0,$extidx)} )
#set( $ucext = ${ucfull.substring($extstart)} )
#else
#set( $ucname = $!{ucfull} )
#set( $ucext = ${ext.toUpperCase()} )
#end
${ucname}_${ucext}##
#end##
C头文件
或C++类头文件
,具体视需要更新的语言而定。#parse("IncludeGuard.h")##
#set( $blank = "" )
#[[#ifndef]]# #includeGuard(${NAME} "h")${blank}
#[[#define]]# #includeGuard(${NAME} "h")${blank}
// ...
#[[#endif]]# // #includeGuard(${NAME} "h")
如果一切按预期运行,尝试使用名称 test-include-guard
或 test-include-guard.h
创建C标头文件,应该会得到以下结果:
#ifndef TEST_INCLUDE_GUARD_H
#define TEST_INCLUDE_GUARD_H
// ...
#endif /* TEST_INCLUDE_GUARD_H */
注意事项:
includeGuard(${NAME} "h")
的部分更改为您想要用作第二个参数的任何扩展名。模板将尝试从${NAME}
解析文件扩展名,但仅当您在新文件名对话框中明确输入它时,${NAME}
才包含文件扩展名。##
。#set( $blank = "" )
策略来解决。#parse()
中的Include模板编译后进行缓存。如果您在此之后更改了Include模板,则通常需要使用File > Invalidate Caches/Restart菜单命令才能使更改生效。${INCLUDE_GUARD}
更改为_${NAME}_H_
例如,如果您的文件名是:clion.h
,那么_${NAME}_H_
会被渲染为_clion_H_
,因为${NAME}
被渲染为文件名(不包括扩展名)。
#[[#ifndef]]# BASE_${HEADER_FILENAME}
#[[#define]]# BASE_${HEADER_FILENAME}
#[[#endif]]# //BASE_${HEADER_FILENAME}
>
#ifndef BASE_test_h
#define BASE_test_h
#endif //BASE_test_h
FILENAME_H
,在一个项目中有多个文件具有相同的名称并不罕见。 - Holt#pragma once
而不是#ifndef
包含保护。可以在设置->编辑器->文件和代码模板
下更改用于头文件创建的模板。 - sitic#define
可以加快编译速度。而#pragma once
不是标准的预C++11版本的一部分。 我不相信${PROJECT}_${FILE}_H
在CLion中是硬编码的。 - Kroll<FILENAME>_<EXT>_INCLUDED_<YYYYMMDD>
。当我在同一天写2d/Vector.hh
和3d/Vector.hh
时,我会自然而然地添加一些额外的东西,比如墙上时间(VECTOR_HH_INCLUDED_20181003_1953
)或文件夹(MATH_2D_VECTOR_HH_INCLUDED_20181003
)。当然这还不完美(有些库也可能带有VECTOR_HH_INCLUDED_20181003
),但实际上,向量示例是唯一发生在我身上的事件。INCLUDED
部分只是为了美观。 - Sebastian Mach