在编译时将文本文件转换为字符串
Turn a Text File into a String at Compile Time
我有一个文本文件,里面有一些类似C的纯文本。我想在编译时(理想情况下使用cmake
),获取该文件中的文本,并使用它来生成一个简单的C++头文件,该头文件有几个include、命名空间声明和一个std::字符串,其值是我的文本文件的内容、新行和包含的所有内容。
最好的方法是什么?
好的,所以我选择了一个不同于这里建议的解决方案。以下是我所做的。
在我的源代码中,我定义了一个处理程序类,在那里我将使用我需要的字符串文字。这里有两件事很重要:
- 在版本控制下,头文件实际上是一个
.hpp.in
。实现文件是一个普通的.cpp
- 在这个头文件中,我选择了一个变量并#定义它为:
#define MY_STRING @MY_STRING@
现在,在负责这两个文件的CMakeLists.txt中,我这样做:
- 将原始文本文件读取到cmake变量中
- 删除所有
//
注释,将结果保存在临时变量中 - 将所有
n
字符替换为字符串"newline"
,将结果保存到新的临时变量中 - 定义我在上面的标题中使用的相同变量(即
MY_STRING
),并从最新的临时变量中分配 - 通过指定
@ONLY
,将标头从其在${CMAKE_SOURCE_DIR}下的位置复制到${CMAKE_BINARY_DIR}下的适当位置(并将其重命名为.hpp
)。这确保cmake将复制头文件,但也将使用我稍早设置的MY_STRING
值更新#define MY_STRING @MY_STRING@
最后,在处理程序的实现文件中,我定义了以下宏:
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
以便我可以调用CCD_ 13并将输出分配给CCD_。完成后,我所需要做的就是用"n"
替换"newline"
占位符字符串,我就完成了!my_string
现在的值相当于原始文本文件中的值(并没有注释)。
我希望我有更多的时间玩这个游戏,减少其他分散我注意力的任务,但按照目前的情况,这将是必须的。
谢谢大家的帮助!
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数