2014-01-10 4 views
8

Я перекрестно компилирую программу для безголовой среды, и я хочу иметь массив, заполненный данными, которые я сохранил в файле. Есть ли способ сделать это во время компиляции?Заполнение массива во время компиляции из файла

Причина: копирование данных в источник кажется уродливым.

+0

Вы можете написать программу «драйвер», который генерирует исходный файл. Он будет считывать данные из файла и вставлять их в исходный файл. –

+1

Вы можете интегрировать 'xxd -i' или' objcopy' в свою сборку. См. Http://stackoverflow.com/questions/1155578/which-program-creates-a-c-array-given-any-file –

+0

Я не уверен, но вы можете взглянуть на 'constexpr' в C++ 11. – holgac

ответ

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 
+0

+1 Больше усилий (чем мое). – hmjd

Смежные вопросы