Как скомпилировать программу на C в C? - PullRequest
0 голосов
/ 24 февраля 2011

Я делаю программу на c, которая может производить другой код на c.

Как с помощью первой программы скомпилировать и запустить вторую программу сразу после ее создания?

Ответы [ 3 ]

6 голосов
/ 24 февраля 2011

Один из способов - использовать system() вызов ...

system("cl generated_file.c -o gen_exe") ;
system("./gen.exe");

или

system("gcc generated_file.c -o gen.exe");
system("./gen.exe");

Или для этого вы используете простой пакет, скрипт или make-файл

2 голосов
/ 24 февраля 2011

Я сделаю две заметки в одной:

Во-первых, если у вас есть одна программа, генерирующая исходный код, почему бы не использовать обычную систему сборки, чтобы справиться с этим?Для системы сборки на основе Make это может выглядеть примерно так:

second_program : second.c
    $(CC) $(CFLAGS) -o $@ $<

second.c : first_program
    ./first_program $(GENERATION_OPTIONS) > $@

first_program : $(LIST_OF_SOURCE_FILES)
    $(CC) $(CFLAGS) -o $@ $<

Это больше соответствует философии Unix, чем первая программа, запускающая внешнюю команду, что всегда приятно.

Во-вторых, вы хотите, чтобы вторая программа генерировалась и выполнялась динамически?Т.е. будет ли полученный код зависеть от некоторого динамического состояния первой программы, и может ли вывод второй программы быть релевантным первой?Если это так, возможно, вам следует взглянуть на то, что вы можете сделать с библиотекой для запуска какого-либо языка сценариев, например LUA или ECMAScript .(Возможно, это слишком сложно для рассматриваемого вами случая, но всегда приятно знать, какие есть варианты.)

1 голос
/ 24 февраля 2011

Вам потребуется встроить компилятор в ваше приложение (например, libtcc или lcc ) или вызвать его через командную строку, но для этого необходимо определить, что пользователь установилили, по крайней мере, включая дополнительные двоичные файлы с вашим приложением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...