在 Apache Velocity 模板语言中获取文件目录

Get file directory in Apache Velocity Template Language

本文关键字:获取 文件目录 语言 Apache Velocity      更新时间:2023-10-16

CLion 使用 Apache 的 Velocity 模板语言 (VTL( 为 C++ 和 C 文件创建模板。 在CLion的帮助下(https://www.jetbrains.com/help/clion/file-template-variables.html(,列出了一堆可以使用的变量。

但是,我想知道是否可以将创建C++文件的目录用作我的一个模板中的变量? 我问这个是因为我喜欢以java/包类型的方式构建我的源文件。

"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的象征,他们的网站将其列为"表示重构期间创建的命名空间块的开始/结束"。

我很高兴地宣布,这已在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

和测试2.hpp:

//
// Created by user on 4/15/19.
//
#ifndef CPP_TEST2_HPP
#define CPP_TEST2_HPP

class test2
{
};

#endif //CPP_TEST2_HPP