如何编写一个使用GCC编译其他C程序的C程序?

时间:2014-09-23 17:58:23

标签: c ubuntu-14.04

我希望我的程序与下面的终端命令做同样的事情:

gcc program1.c -o p1 funcs.c

gcc program2.c -o p1 funcs.c

这就是我一直在试验的内容:Making a C program to compile another

我到目前为止调用终端中的程序(./"programName"),它取代了我对gcc的需求,但是我也需要输入其他内容。

3 个答案:

答案 0 :(得分: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 + waitpid gcc编译器(或make),甚至可能生成dlopen(3)编译的结果(您需要gcc -fPIC -shared -O foo.c -o foo.so来编译dlopen能够共享的对象...)。 MELT正是这样做的。 (我的manydl.c也表明你可以做很多dlopen - s ...)

答案 1 :(得分:0)

您可以使用exec系列函数,也可以使用system()方法直接执行shell命令

答案 2 :(得分:0)

Makefile中有内置功能。<​​/ p>

您只需致电make

如何:http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/

很棒的stackoverflow问题:How do I make a simple makefile for gcc on Linux?