在编译时从文件填充数组

时间:2014-01-10 11:52:56

标签: c++ arrays

我正在为一个裸机环境编写一个程序,我想要一个填充了我存储在文件中的数据的数组。有没有办法在编译时读取这个?

原因:将数据复制粘贴到源代码似乎很难看。

2 个答案:

答案 0 :(得分:6)

构建过程的一部分可以是运行一个程序,该程序将文件作为输入并生成一个C ++源文件,将其定义为数组,如:

char arrayFromFile[] = {
    0x01, 0x02, 0x99, ...  and so on
};

程序本身可能是源代码的一部分。

然后在构建周期中稍后编译该程序。例如,您可能拥有以下makefile段:

generate: generate.cpp
    g++ -o generate generate.cpp    # build data generator

data.cpp: data.dat
    generate data.dat >data.cpp     # create c file with data

prog: prog.cpp data.cpp
    g++ -o prog prog.cpp data.cpp   # create program from source and data

答案 1 :(得分:1)

GCC 和 Clang 都可用于将任意文件打包成 .o 作为静态字符串。将它使用的符号名称映射到程序员认为该文件的名称(特别是如果 "physical" and "logical" file paths in the build 不是同一件事时),最终会有点复杂,但该过程的核心是 {{3 }} 并且,忽略极端情况,归结为:

gcc ... -Wl,--format=binary -Wl,$FILE1 -Wl,$FILE2 ...

(使用 Bazel 作为构建工具的项目可以直接使用包含的 bzl 规则。)