我希望我的程序做同樣的事情,在終端下面的命令:如何編寫使用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
,但需要我也輸入其餘。
我希望我的程序做同樣的事情,在終端下面的命令:如何編寫使用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
,但需要我也輸入其餘。
可以使用exec
家庭功能,也可以直接使用system()
方法
有建立在Makefile中的功能執行shell命令。你可以撥打make
。
如何:http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
您可以使用Linux和POSIX API,以便讀取第一Advanced Linux Programming和intro(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
+ waitpid
的gcc
編譯器(或make
),然後甚至dlopen(3)的編譯的結果(你需要gcc -fPIC -shared -O foo.c -o foo.so
編譯一個dlopen
能夠共享對象...)。 MELT正在做這件事。 (我的manydl.c也是如此,這表明你可以做很多dlopen
-s ...)
太寬了..需要很多努力。 – Steve 2014-09-23 18:00:02
_「這就是我一直在試驗的東西」_。你碰到什麼問題?目前還不清楚你的實際問題是什麼。 – Michael 2014-09-23 18:00:39