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]==‘.‘) {//.c
30                 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]==‘c‘
36                     && fname[len-2]==‘c‘ && fname[len-3]==‘.‘) {//.cc
37                 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]==‘p‘
43                     && fname[len-3]==‘c‘ && fname[len-4]==‘.‘) {//.cpp
44                 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 }
时间: 2024-12-17 19:17:31

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

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

基础版本的jmake是将所有当前文件夹下的C/C++文件生成单文件编译命令,并且jmake命令不可加选项. 现在做的改进是能在输入命令jmake时加上一些选项了,‘-’开头的选项加入到每个编译单文件的生成命令中去,其他的选项则是指定要编译的源文件.当然,如果没有指定源文件,就把所有.c,.cc,.cpp文件都分别编译. 代码如下: /* * author: huanglianjing * * this is a program to compile all single c/c++ file o

Ubuntu&amp;红帽的vim通用配置(文件头+一键编译执行C/C++/Java单文件)

vim是一款功能很强大的编辑器,可能网上的大神们配置的比较复杂.功能也很多.我这里的配置能够满足基本需求.快速且通用,只要大家将自己的vimrc文件打开按照我的截图添加几行代码即可解决. 大家直接看我的配置文件吧 先讲一下ubuntu与redhat下打开配置文件vimrc的方法 *在redhat下 首先切换到root.然后输入 vim /etc/vimrc 在ubuntu下 直接输入 sudo vim /etc/vim/vimrc 打开配置文件vimrc之后按照下面图示中添加代码即可 这里的配置

grep-2.26 sed-4.2.2 awk-4.1.4 最新版本静态编译 [不依赖 DLL 的单文件]

-------------------------------------------------------------------------------------------- grep (GNU grep) 2.26 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This i

多文件目录嵌套makefile文件编译当前目录c文件和子目录c文件

首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文件直接复制到相应目录即可方便编译出所有文件.这些makefile文件是通用的,只需根据自己的工程情况改动少许内容即可.下面会说. 总体思路是:把目标文件放在debug文件夹下的obj目录下,把最终的二进制文件放在debug文件夹下的bin目录下;如何递归编译所有除了debug目录下的makefile

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

Clion中编译多个cpp(实现单文件编译) 在不做任何配置情况下,Clion工程下只能有一个main()函数,新建多个cpp会导致报main()函数重复定义的错误,所以默认情况下无法在一个工程下编译多个cpp文件. 要想实现单文件编译,或者说编译过多个cpp文件,有两种解决方法: 手动配置CMakeLists.txt 安装插件(推荐) 手动配置CMakeLists.txt 像这样,为每个cpp文件制定唯一的编译器,编译运行的时候,选择相应的编译器即可. 更简单的方法是,第一次运行的时候使用快捷

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

 引言:很多人用ide集成开发环境用的多了,对dos命令编译多个java文件或引入jar包都变得陌生了,java不同于其他解释语言,如ruby.php 都有require,直接引入即可运行代码,但java需要先编译成字节码,所以运行的时候需要在cmd里面加些参数 1. 引入外部jar包编译运行 测试目录结构 test -- src/A.java -- lib/pinyin4j-2.5.0.jar  A.java 代码如下: 1 import net.sourceforge.pinyin4j.Pi

JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址

JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址 在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上1.可以在servlet的init方法里String path = getServletContext().getRealPath("/");这将获取web项目的全路径例如 :E:\eclipseM9\workspace\tree\tree是我web项目的根目录 2.你也可以随时在任意的class里调用this.getCla

编译过程中,termcap.h 文件找不到路径 licli.a终于生成

编译过程中,termcap.h      文件找不到路径 查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termcap.h  发现一篇文章,如下 ----------------------------------------------------------------------------------------- 安装minicom2.3出现termcap.h错误解决方法 2010-05-06 17:12:

系统垃圾清理利器CCleaner v5.30.6063绿色单文件版(增强版)

系统垃圾清理利器CCleaner现已更新至v5.30.6063,此次更新为Edge.IE浏览器提供了更好的清理功能,更新了Windows Explorer MRU清理功能,同时改善了应用程序中的SSD检测.5.0版全新Modren UI界面设计,简洁大气!内部框架大优化,性能大提升!支持主动防御及监控! CCleaner是梨子公司Piriform最为著名广受好评的软件,系统垃圾清理工具,免费的系统清理优化和隐私保护工具,也是该公司主打和首发产品!它体积小巧.运行速度极快,具有强大的自定义清理规则