[英]How to write a C program that compiles other C programs using GCC?
我希望我的程序與以下終端命令執行相同的操作:
gcc program1.c -o p1 funcs.c
gcc program2.c -o p1 funcs.c
這就是我一直在嘗試的事情: 制作一個C程序來編譯另一個
我到目前為止在終端中調用了我的程序( ./"programName"
),以至於我也不需要輸入gcc
但也需要我輸入其余的內容。
您可以使用Linux和POSIX API,因此請先閱讀Advanced Linux Programming和intro(2)
您可以只使用system(3)運行一個編譯命令,可以使用snprintf(3)來構建命令字符串(但要注意代碼注入 ); 例如
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代碼,然后對gcc
編譯器(或make
)進行fork
+ execve
+ waitpid
,然后甚至可能是dlopen(3)的編譯結果(您將需要gcc -fPIC -shared -O foo.c -o foo.so
來編譯支持dlopen
共享對象...)。 MELT正是這樣做的。 (我的manydl.c也是如此,它表明您可以做很多dlopen
-s ...)
您可以使用exec
系列函數,也可以使用system()
方法直接執行shell命令
Makefile中有內置功能。
您只需要打電話給make
。
如何: http : //www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
巨大的stackoverflow問題: 如何在Linux上為gcc創建簡單的makefile?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.