如何编写一个使用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?