CLion使用Apache的Velocity Template Language(VTL)为C ++和C文件创建模板。 在CLion的帮助(https://www.jetbrains.com/help/clion/file-template-variables.html)中列出了一堆可以使用的变量。
我想知道,如果可以在我的一个模板中使用创建C ++文件的目录作为变量吗? 我问这个是因为我喜欢以java / package类型的方式构建我的源文件。
“Utils”目录中的所有文件都是“Utils”命名空间的一部分,“Ui”目录中的所有包都是“Ui”命名空间等的一部分......
所以我想知道我是否有办法获取文件的父目录,以便我可以在模板中使用它? (也许可以通过在CMakeLists.txt
中设置变量?)
这是我想要实现的一个例子
#parse("C File Header.h")
#[[#ifndef]]# ${INCLUDE_GUARD}
#[[#define]]# ${INCLUDE_GUARD}
${NAMESPACES_OPEN}
namespace ${CWD}
class ${NAME}
{
};
${NAMESPACES_CLOSE}
#[[#endif]]# //${INCLUDE_GUARD}
其中${CWD}
表示文件所在的文件夹。
${NAMESPACE_OPEN}
和${NAMESPACE_CLOSE}
指令似乎纯粹是CLion的象征,他们的网站将其列为“表示在重构期间创建的命名空间块的开头/结尾。”
答案 0 :(得分:0)
我很高兴地宣布,此问题已在CLion 2019.1中修复
通过转到File
-> Settings
-> Editor
-> Code Style
-> C/C++
-> Naming Conventions
一些额外的变量${PROJECT_REL_PATH}
,${FILE_NAME}
,${EXT}
。
使用此功能时,请确保还选中File
-> Settings
-> Editor
-> File and Code Templates
。可以使用${INCLUDE_GUARD}
变量在此处访问您先前定义的包含保护。
这是一个示例项目和配置,用于说明:
File
-> Settings
-> Editor
-> File and Code Templates
:
#parse("C File Header.h")
#[[#ifndef]]# ${INCLUDE_GUARD}
#[[#define]]# ${INCLUDE_GUARD}
${NAMESPACES_OPEN}
class ${NAME} {
};
${NAMESPACES_CLOSE}
#[[#endif]]# //${INCLUDE_GUARD}
File
-> Settings
-> Editor
-> Code Style
-> C/C++
-> Naming Conventions
:
${PROJECT_REL_PATH}_${FILE_NAME}_${EXT}
项目结构:
Project
├── CMakeLists.txt
├── cpp
│ ├── Test2.cpp
│ └── Test2.hpp
├── main.cpp
├── Test.cpp
└── Test.hpp
这提供了一个看起来像这样的“ Test.hpp”:
//
// Created by user on 4/15/19.
//
#ifndef _TEST_HPP
#define _TEST_HPP
class test
{
};
#endif //_TEST_HPP
和以下内容的Test2.hpp:
//
// Created by user on 4/15/19.
//
#ifndef CPP_TEST2_HPP
#define CPP_TEST2_HPP
class test2
{
};
#endif //CPP_TEST2_HPP