2015-05-15 4 views
-1

Я пишу код, который получил путь к файлу C, и я хочу скомпилировать файл по программному коду. Это означает, что компиляция не будет в командной строке, например:Скомпилировать файл c исходным кодом

gcc -o a.out file.c 

Существует способ сделать это?

+3

быстрый и грязный, используйте [ 'система()'] (http://man7.org/linux/man-pages/man3/system.3.html) –

+0

Просто уточнить, у вас есть программа, и в этой программе вы хотите скомпилировать * другую * программу, «вызывая» команду 'gcc'? Тогда функция 'system', как упомянуто выше, может выполнить эту работу. –

+0

Или вы можете сделать что-то вроде 'execv ("/usr/bin/gcc ", pathToSource)' –

ответ

1

Если вы пытаетесь скомпилировать исходный C-файл в программном порядке, вы можете попробовать это:

execlp("gcc", "gcc", "file.c", "-o", "a.out", NULL); 

execlp имеет преимущество поиска в каталогах, хранящиеся в вашей среде $PATH найти нужный исполняемый файл. Он возвращает -1, если вызов завершился с ошибкой. Не забудьте сделать это #include <unistd.h>.

Вы также можете уйти с другим простым вызовом:

system("gcc file.c -o a.out"); 

Это требует #include <stdlib.h> и будет выполнять gcc, вызывая /bin/sh.

+1

Это потому, что 'execlp()' заменяет текущий процесс новым, и зависит в вашем контексте вы можете использовать его с 'fork()', чтобы предотвратить это. Однако более высокий уровень 'system()' должен позаботиться об этом для вас и может быть проще в этом случае. – adriann

+0

да нашёл это, спасибо !! –

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