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

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

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

使用方式:

 jmake

源代码:

 /*
  * author: huanglianjing
  *
  * this is a program to compile all single c/c++ file of current directory
  *
  * usage: jmake
  */

 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <dirent.h>
 #include <string.h>
 #include <sys/stat.h>

 int main()
 {
     struct dirent *entry;
     struct stat statbuf;

     DIR *dp = opendir(".");
     while ((entry=readdir(dp)) != NULL) {
         lstat(entry->d_name,&statbuf);
         if (!S_ISDIR(statbuf.st_mode)) {
             ], ename[], instruction[];
             strcpy(fname,entry->d_name);
             strcpy(ename,entry->d_name);
             int len = strlen(fname);
              && fname[len-]==]=='.') {//.c
                 ename[len-] = '\0';
                 sprintf(instruction,"gcc %s -o %s",fname,ename);
                 printf("%s\n",instruction);
                 system(instruction);
             }
              && fname[len-]=='c'
                     && fname[len-]==]=='.') {//.cc
                 ename[len-] = '\0';
                 sprintf(instruction,"g++ %s -o %s",fname,ename);
                 printf("%s\n",instruction);
                 system(instruction);
             }
              && fname[len-]==]=='p'
                     && fname[len-]==]=='.') {//.cpp
                 ename[len-] = '\0';
                 sprintf(instruction,"g++ %s -o %s",fname,ename);
                 printf("%s\n",instruction);
                 system(instruction);
             }
         }
     }
     closedir(dp);
     ;
 }

jmake 编译当前目录所有c/c++单文件的更多相关文章

  1. jmake 编译当前目录c/c++单文件 指定文件 可加选项

    基础版本的jmake是将所有当前文件夹下的C/C++文件生成单文件编译命令,并且jmake命令不可加选项. 现在做的改进是能在输入命令jmake时加上一些选项了,‘-’开头的选项加入到每个编译单文件的 ...

  2. 如何手动解析vue单文件并预览?

    开头 笔者之前的文章里介绍过一个代码在线编辑预览工具的实现(传送门:快速搭建一个代码在线编辑预览工具),实现了css.html.js的编辑,但是对于demo场景来说,vue单文件也是一个比较好的代码组 ...

  3. .NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT,将.NET Core应用打包成一个可执行文件并包含运行时. 支持Windows, MacOS and Linux x64 w/ RyuJIT ...

  4. fis入门-单文件编译之文件优化(optimize)

    FIS(Front-end Integrated Solution ),是百度的前端集成解决方案.最近几天在研究前端构建的东西,就顺便了解了下,果断各种高大上,可以到FIS官网围观感受一下.如果对fi ...

  5. # Clion中编译多个cpp(实现单文件编译)

    Clion中编译多个cpp(实现单文件编译) 在不做任何配置情况下,Clion工程下只能有一个main()函数,新建多个cpp会导致报main()函数重复定义的错误,所以默认情况下无法在一个工程下编译 ...

  6. # codeblocks 使用技巧+伪单文件编译

    codeblocks 使用技巧+伪单文件编译 shift+F2打开和隐藏左侧工作空间 F2 打开和隐藏下面控制台 CTRL+Shift+c 注释,CTRL+Shift+x取消注释 view->p ...

  7. [转帖].NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT https://www.cnblogs.com/linezero/p/CoreRT.htm .NET Core单文件发布静态编译AOT Cor ...

  8. 随笔:关于.net core单文件AOT编译

    .Net Core单文件发布已经很流畅了(vs已支持图形化操作发布). 但类似Go或者Graalvm JDK的完全事前编译为本地机器码的红能功能,还未发布于.net 6特性中,还处于实验室中. 另外, ...

  9. javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题

     引言:很多人用ide集成开发环境用的多了,对dos命令编译多个java文件或引入jar包都变得陌生了,java不同于其他解释语言,如ruby.php 都有require,直接引入即可运行代码,但ja ...

随机推荐

  1. codevs1304 拓扑序计数

    题目描述                     Description 求一颗有根树/树形图的拓扑序个数. 输入描述                 Input Description        ...

  2. Mongodb常见错误

    1. log目录没有创建,而在logpath中有设定 2. SECONDARY默认不可以读取数据,需要db.getMongo().setSlaveOk(); 3. SECONDARY不可以写数据 4. ...

  3. CentOS上编译安装Git

    1. 安装(编译安装)软件 # 先安装git依赖的包 yum install zlib-devel yum install openssl-devel yum install perl yum ins ...

  4. skynet newservice API参考

    local skynet = require("skynet") skynet.start(start_func) c服务snlua启动后执行的第一个lua文件里面的主逻辑必定是s ...

  5. OpenCV2.4.9+VS2012安装与配置

    需要下载并安装Visual Studio 2012 然后在OpenCV官网下载安装OpenCV2.4.9 for Windows,网址为http://opencv.org/downloads.html ...

  6. Sass使用教程

    sass官网: http://sass-lang.com/ http://sass-lang.com/documentation/file.SASS_REFERENCE.html Sass和Scss的 ...

  7. umdh工具使用

    先安装工具,http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 选择其中的http://msdn.microsoft.com/ ...

  8. 从缓冲上看阻塞与非阻塞socket在发送接收上的区别

    最近在网络上看到一些帖子以及回复,同时又搜索了一些网络上关于阻塞非阻塞区别的描述,发现很多人在描述两者的发送接收时操作返回以及缓冲区处理的区别时有不同程度的误解.所以我想写一篇文章来纠正错误,并作为记 ...

  9. poj1484---判断保险丝是否烧断

    题目输入要求: 2 2 10 //设备数n  接下来的操作数m   保险丝能承受最大电流c5 //电器1的电流7 //2的电流1 //反转开关12 //反转开关2 思路:设置一个flag数组,记得每次 ...

  10. 客户端浏览器判断(ios .android)

    在开发工程中,我们可能需要判断客户端浏览器的版本而作相应的处理:通常做法是通过浏览器的userAgent去判断浏览器版本,故在此总结下,方便以后使用. <script type="te ...