在编译时将文本文件转换为字符串

Turn a Text File into a String at Compile Time

本文关键字:转换 字符串 文件 文本 编译      更新时间:2023-10-16

我有一个文本文件,里面有一些类似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现在的值相当于原始文本文件中的值(并没有注释)。

我希望我有更多的时间玩这个游戏,减少其他分散我注意力的任务,但按照目前的情况,这将是必须的。

谢谢大家的帮助!