jmake 编译当前目录c/c++单文件 指定文件 可加选项
基础版本的jmake是将所有当前文件夹下的C/C++文件生成单文件编译命令,并且jmake命令不可加选项。
现在做的改进是能在输入命令jmake时加上一些选项了,‘-’开头的选项加入到每个编译单文件的生成命令中去,其他的选项则是指定要编译的源文件。当然,如果没有指定源文件,就把所有.c,.cc,.cpp文件都分别编译。
代码如下:
/* * author: huanglianjing * * this is a program to compile all single c/c++ file of current directory * * usage: jmake <files> <-options> * if no files assigned, all files in directory will be searched * any option will be added to every instruction */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <string.h> #include <sys/stat.h> ][], option[][]; int filenum, optionnum; ]; int file_in_argv(char *filename)//whether filename in argv { int i; ; i<filenum; ++i) { ) ; } ; } void suffix(char *filename)//get filetype, return empty string if not has { int len = strlen(filename); int pos; ; pos>=; --pos) { if (filename[pos] == '.') break; } || pos == len-) suf[] = ; else { int i; ; i<len--pos; ++i) suf[i] = filename[pos++i]; suf[len--pos] = ; } } int main(int argc, char *argv[]) { struct dirent *entry; struct stat statbuf; int i; filenum = optionnum = ; ; i<argc; ++i) { ] == '-') {//option strcpy(option[optionnum++],argv[i]); } else {//file strcpy(file[filenum++],argv[i]); } } 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); || file_in_argv(fname)) ;//consider this file else continue;//not consider this file int len = strlen(fname); suffix(fname); ) {//.c ename[len-] = '\0'; sprintf(instruction,"gcc %s -o %s",fname,ename); ; i<optionnum; ++i) { strcat(instruction," "); strcat(instruction,option[i]); } ++insnum; printf("%s\n",instruction); system(instruction); } ) {//.cc ename[len-] = '\0'; sprintf(instruction,"g++ %s -o %s",fname,ename); ; i<optionnum; ++i) { strcat(instruction," "); strcat(instruction,option[i]); } ++insnum; printf("%s\n",instruction); system(instruction); } ) {//.cpp ename[len-] = '\0'; sprintf(instruction,"g++ %s -o %s",fname,ename); ; i<optionnum; ++i) { strcat(instruction," "); strcat(instruction,option[i]); } ++insnum; printf("%s\n",instruction); system(instruction); } } } ) puts("no file compiled"); closedir(dp); exit(); }
jmake 编译当前目录c/c++单文件 指定文件 可加选项的更多相关文章
- jmake 编译当前目录所有c/c++单文件
在一个目录下写一些单文件的c或者c++文件时,每次敲出命令如g++ a.cpp -o a感觉比较麻烦. 所以就模仿makefile的功能,实现了扫描当前目录,并将所有c文件.cc文件.cpp文件直接调 ...
- Nginx下载文件指定文件名称
配置 location ^~/TEMP/ { alias/share/files/; if ($request_uri ~* ^.*\/(.*)\.(txt|doc|pdf|rar|gz|zip|do ...
- scala 读取文件加下的指定文件
1,获取指定类型文件 def getFile(file:File): Array[File] ={ val files = file.listFiles().filter(! _.isDirector ...
- python实现在目录中查找指定文件的方法
python实现在目录中查找指定文件的方法 本文实例讲述了python实现在目录中查找指定文件的方法.分享给大家供大家参考.具体实现方法如下: 1. 模糊查找 代码如下: import os from ...
- dos 下删除文件、文件夹
删除文件 /p 删除每一个文件之前提示确认/f 强制删除只读文件 /s 从当前目录及所有子目录删除指定文件/q 安静模式.删除全局通配符时,不要求确认/a 根据属性选择要删除的文件 指定下列文件属性中 ...
- php清理当前目录下的指定文件和空目录(源码),建议服务器端执行
<?php /** * @desc 解析当前目录并递归删除目录下的指定文件 * @author mengdj<mengdj@outlook.com> 2014.10.02 1530 ...
- 如何解决Visual Studio2010 编译时提示系统找不到指定文件问题
前一段时间,开始使用vs2010编写程序,可是在编译的时候总是报错,提示系统找不到指定文件,导致无法正常运行程序,花了好久时间终于找到原因解决,是因为常规的输出目录 要与链接的常规的输出文件要相对应. ...
- [问题解决]gradle编译失败系统找不到指定的文件
[问题解决]gradle编译失败系统找不到指定的文件 问题描述 Error:C:\Users\diql.gradle\caches\2.14.1\scripts-remapped\settings_9 ...
- bat 读取当前目录指定文件信息并拼接
bat 读取指定文件的信息并拼接成指定格式
随机推荐
- C++程序设计实践指导1.7超长数列中n个数排序改写要求实现
改写要求1:将以上程序改写为适合超长整数 改写要求2:将以上程序改写为适合超长数列 改写要求3:将数列中指定位置m开始的n个结点重新按降序排序 改写要求4:输出指定位置m开始的n个结点的超长整数 #i ...
- JavaScript事件属性绑定带参数的函数
JavaScript中在对事件进行绑定的时候,往往是element.onclick=event;这种形式,这样使用的话则会出现无法传参数.因此我们可以使用function(){}匿名函数将事件包含其中 ...
- ajax数据显示,使用js通用模板
最近用ajax获取数据,上级要求要自己写一个js模板,以往看到的js模板,大都数都是在js里面拼接的,现在换一种比较简单的写法, 通过ajax获取数据源,js模板循环显示数据 function Get ...
- java中的xpath,读取xml文档。
1,入门 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 X ...
- Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class android.support.design.widget.TabLayout,TableLayout引起页面崩溃
在使用TableLayout的时候,运行引用程序直接Crash. FATAL EXCEPTION: main Process: com.edaixi.activity, PID: 9703 java. ...
- HTML5图形绘制学习(1)-- Canvas 元素简介
Canvas元素是HTML5中新增的一个专门用来进行图形绘制的元素.和其名称Canvas一样,它就相当于一个画布,我们可以在其上描绘各种图形. 这里所说的绘制图型,不是指我们可以进行可视化的图形绘制, ...
- Goldbach's Conjecture(哥德巴赫猜想)
Goldbach's Conjecture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- ArrayList的contains方法(转)
今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList 但在调用list.contains(user)时总是返回false. 去看了下Arra ...
- Inno Setup技巧[实例]添加自定义页面
原文 http://hi.baidu.com/watashi/item/b3dda993459ff8f0291647a0 通过“添加自定义页面”可以丰富安装程序的功能.本文以添加一个页面“选择安装类型 ...
- Android中ListView无法点击
Android中ListView无法点击 转自:http://xqjay19910131-yahoo-cn.iteye.com/blog/1319502 问题描述: ListView中Item加入 ...