如何编写一个使用GCC编译其他C程序的C程序?
我希望我的程序与下面的终端命令做同样的事情:
gcc program1.c -o p1 funcs.c gcc program2.c -o p1 funcs.c
这就是我一直在尝试的: 制作一个C程序来编译另一个
我到目前为止在终端中调用我的程序( ./"programName"
),它取代了我对gcc
的需求,但是我需要在其余部分输入。
您可以使用Linux和POSIX API,因此请先阅读高级Linux编程和介绍(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%dc fun.c -op%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
able共享对象…)。 MELT正是这样做的。 (我的manydl.c也是如此,这表明你可以做很多dlopen
-s …)
您可以使用exec
系列函数,也可以使用system()
方法直接执行shell命令
Makefile中有内置function。
所有你需要打电话的是make
。
如何: http : //www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
很棒的stackoverflow问题: 如何在Linux上为gcc创建一个简单的makefile?