我希望我的程序与下面的终端命令做同样的事情:
gcc program1.c -o p1 funcs.c
gcc program2.c -o p1 funcs.c
这就是我一直在试验的内容:Making a C program to compile another
我到目前为止调用终端中的程序(./"programName"
),它取代了我对gcc
的需求,但是我也需要输入其他内容。
答案 0 :(得分:2)
您可以使用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 ...)
答案 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?