我有一个包含一堆数据的文件。我想将其转换为 C++ 字符串文字,因为我需要将此数据编译为二进制文件 - 我无法从磁盘读取它。
这样做的一种方法是只生成一个 C++ 源文件,该文件声明一个具有已知名称的字符串文字。执行此操作的 CMake 代码很简单,即使有些糟糕:
function(make_literal_from_file dest_file source_file literal_name)
add_custom_command(
OUTPUT ${dest_file}
COMMAND printf \'char const* ${literal_name} = R\"\#\(\' > ${dest_file}
COMMAND cat ${source_file} >> ${dest_file}
COMMAND printf \'\)\#\"\;\' >> ${dest_file}
DEPENDS ${source_file})
endfunction()
这可以工作并且可以满足我的要求(printf
有必要避免在原始字符串介绍器之后出现新行)。然而,这里发生的大量逃逸使得很难看到发生了什么。有没有办法编写这个函数,使它实际上是可读的?
请注意,我不能在这里使用file(READ ...)
/configure_file(...)
组合,因为source_file
可能是 CMake 在构建时生成的东西,因此在配置时可能不存在。