簡體   English   中英

如何編寫一個使用GCC編譯其他C程序的C程序?

[英]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 Programmingintro(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM