在 Apache Velocity 模板语言中获取文件目录
Posted
技术标签:
【中文标题】在 Apache Velocity 模板语言中获取文件目录【英文标题】:Get file directory in Apache Velocity Template Language 【发布时间】:2018-01-29 04:33:45 【问题描述】:CLion 使用 Apache 的 Velocity 模板语言 (VTL) 为 C++ 和 C 文件创建模板。 在 CLion 的帮助下 (https://www.jetbrains.com/help/clion/file-template-variables.html) 列出了一堆可以使用的变量。
但是,我想知道,是否可以在我的一个模板中使用创建 C++ 文件的目录作为变量? 我问这个是因为我喜欢以 java/package-type 的方式构造我的源文件。
“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 来说纯粹是象征性的,他们的网站将其列为“表示重构期间创建的命名空间块的开始/结束”。
【问题讨论】:
希望有答案,不知道为什么这么难找到 【参考方案1】:我很高兴地宣布,CLion 2019.1 已修复此问题
通过转到File
-> Settings
-> Editor
-> Code Style
-> C/C++
-> Naming Conventions
用户可以使用一些额外的变量$PROJECT_REL_PATH
, $FILE_NAME
, @ 987654330@.
使用此功能时,请务必检查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
【讨论】:
您的回答对我有所帮助。如何将 $NAME 大写?以上是关于在 Apache Velocity 模板语言中获取文件目录的主要内容,如果未能解决你的问题,请参考以下文章