LINUX.ORG.RU

Подключение текстового файла к исходнику

 


0

2

Пусть имеется произвольный текстовый файл smth.txt.
Хочу сделать примерно следующее:
string s = «#include smth.txt»;
То есть, на этапе компиляции подставить в кавычки содержимое файла smth.txt.
Поясню зачем мне это надо: пользовательские данные у меня загружаются из ресурсов, но иногда нужны некоторые внутренние системные данные, которые не должны находиться в каталоге с ресурсами. Конечно можно вручную скопировать текст из smth.txt в s, но получим дублирование (а это плохо).

Можешь заинклудить, но тогда нужно, чтобы файл сам представлял спецсиволы вроде \n и т. д. А можешь побаловаться с xxd, но это некроссплатформенно.

cdshines ★★★★ ()
Ответ на: комментарий от cdshines

xxd, но это некроссплатформенно

На виндавсе и линусе есть — значит кроссплатформенно.

anonymous ()

Для каждого перехода на новую строку необходимо генерировать кавычки в начале и в конце + \n\r

Как вариант - добавить в систему сборки правило для генерации smth.txt.h, которое расставит кавычки и инклюдить уже его.

Но лучше из smth.txt генерить smth.h и smth.c, в *.h оставить одну глобальную переменную, которая заполняется значением в .c

Такое и сгенерить будет проще и работать потом приятнее.

P.S. Подобным способом я картинки для своей игры преобразую, но у меня там система немного сложнее.

trex6 ★★★★★ ()

Кстати, я не понял, что значит «дублирование»?

cdshines ★★★★ ()

Препроцессинг сделать своим сборщиком же, ну.

vsn ()
Ответ на: комментарий от cdshines

Данные и в .txt и в .c, необходимо вручную поддерживать их когерентность.

trex6 ★★★★★ ()
Ответ на: комментарий от vsn

Препроцессинг можно сделать чем угодно, что можно дернуть из сборщика.

slackwarrior ★★★★★ ()

К слову, можешь qrc заюзать. От кутей он несложно отдирается.

vsn ()

Есть, например cog - выполняет питоновский код из каментов и пишет результат в тот же файл.

Ну, или, как сказали - свой скриптик, который запишет содержимое в хедер. Правило для этого дела в Makefile.

Belkrr ()
Последнее исправление: Belkrr (всего исправлений: 2)

man xpm как пример.

anonymous ()

ЕМНИП это можно сделать при помощи ld.

Deleted ()

Красивее будет сделать это через макрос, т.е.

твой smth.h

#define SMTH_MACRO "bla-bla-text"

твой super_app.cpp
string s(SMTH_MACRO);

EugeneBas ★★ ()

Лучше написать генератор исходников из файла.

anonymous ()
Ответ на: комментарий от anonymous

И опять верный ответ не в первой десятке. Да что ж такое-то?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.