我正在为一个裸机环境编写一个程序,我想要一个填充了我存储在文件中的数据的数组。有没有办法在编译时读取这个?
原因:将数据复制粘贴到源代码似乎很难看。
答案 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 规则。)