2014-09-23 80 views
-1

我希望我的程序做同樣的事情,在終端下面的命令:如何編寫使用GCC編譯其他C程序的C程序?

gcc program1.c -o p1 funcs.c 

gcc program2.c -o p1 funcs.c 

這是我一直在嘗試用:Making a C program to compile another

我就這麼叫我的節目(./"programName")在終端,它取代了我也需要鍵入gcc,但需要我也輸入其餘。

+0

太寬了..需要很多努力。 – Steve 2014-09-23 18:00:02

+5

_「這就是我一直在試驗的東西」_。你碰到什麼問題?目前還不清楚你的實際問題是什麼。 – Michael 2014-09-23 18:00:39

回答

0

可以使用exec家庭功能,也可以直接使用system()方法

2

您可以使用Linux和POSIX API,以便讀取第一Advanced Linux Programmingintro(2)

你可以只運行與system(3)編譯命令,可以使用snprintf(3)來構建命令字符串(但要注意code injection);例如

void compile_program_by_number (int i) { 
    assert (i>0); 
    char cmdbuf[64]; 
    memset(cmdbuf, 0, sizeof(cmdbuf)); 
    if (snprintf(cmdbuf, sizeof(cmdbuf), 
       "gcc -Wall -g -O program%d.c fun.c -o p%d", 
       i, i) 
     >= sizeof(cmdbuf)) { 
     fprintf(stderr, "too wide command for #%d\n", i); 
     exit(EXIT_FAILURE); 
    }; 
    fflush(NULL); // always useful before system(3) 
    int nok = system(cmdbuf); 
    if (nok) { 
     fprintf(stderr, "compilation %s failed with %d\n", cmdbuf, nok); 
     exit(EXIT_FAILURE); 
    } 
} 

順便說一句,你的程序可能會產生一些C代碼,然後fork + execve + waitpidgcc編譯器(或make),然後甚至dlopen(3)的編譯的結果(你需要gcc -fPIC -shared -O foo.c -o foo.so編譯一個dlopen能夠共享對象...)。 MELT正在做這件事。 (我的manydl.c也是如此,這表明你可以做很多dlopen-s ...)