首页 > 代码库 > jmake 编译当前目录所有c/c++单文件

jmake 编译当前目录所有c/c++单文件

在一个目录下写一些单文件的c或者c++文件时,每次敲出命令如g++ a.cpp -o a感觉比较麻烦。

所以就模仿makefile的功能,实现了扫描当前目录,并将所有c文件、cc文件、cpp文件直接调用gcc/g++编译。

本程序的缺点之一就是不能用于文件间有相互include的情况,因为要扫描代码include了其他什么文件比较麻烦。而且不能在编译命令中加入其他库的选项。

 

使用方式:

1 jmake

 

源代码:

 1 /* 2  * author: huanglianjing 3  *  4  * this is a program to compile all single c/c++ file of current directory 5  *  6  * usage: jmake 7  */ 8  9 #include <stdio.h>10 #include <stdlib.h>11 #include <unistd.h>12 #include <dirent.h>13 #include <string.h>14 #include <sys/stat.h>15 16 int main()17 {18     struct dirent *entry;19     struct stat statbuf;20     21     DIR *dp = opendir(".");22     while ((entry=readdir(dp)) != NULL) {23         lstat(entry->d_name,&statbuf);24         if (!S_ISDIR(statbuf.st_mode)) {25             char fname[57], ename[57], instruction[207];26             strcpy(fname,entry->d_name);27             strcpy(ename,entry->d_name);28             int len = strlen(fname);29             if (len>=3 && fname[len-1]==c && fname[len-2]==.) {//.c30                 ename[len-2] = \0;31                 sprintf(instruction,"gcc %s -o %s",fname,ename);32                 printf("%s\n",instruction);33                 system(instruction);34             }35             else if (len>=4 && fname[len-1]==c36                     && fname[len-2]==c && fname[len-3]==.) {//.cc37                 ename[len-3] = \0;38                 sprintf(instruction,"g++ %s -o %s",fname,ename);39                 printf("%s\n",instruction);40                 system(instruction);41             }42             else if (len>=5 && fname[len-1]==p && fname[len-2]==p43                     && fname[len-3]==c && fname[len-4]==.) {//.cpp44                 ename[len-4] = \0;45                 sprintf(instruction,"g++ %s -o %s",fname,ename);46                 printf("%s\n",instruction);47                 system(instruction);48             }49         }50     }51     closedir(dp);52     return 0;53 }

 

jmake 编译当前目录所有c/c++单文件