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 读取指定文件的信息并拼接成指定格式
随机推荐
- linux网络编程:select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
从别人的博客中转载过来了这一篇文章,经过重新编辑排版之后展现于此,做一个知识点保存与学习. select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复 ...
- Building Android Apps 30条建议
Building Android Apps — 30 things that experience made me learn the hard way There are two kinds of ...
- css3渐变详解
今天总结渐变的问题,渐变分为线性渐变.径向渐变.呼呼,废话少说, 线性渐变:background:linear-gradient(设置渐变形式,第一个颜色起点,中间颜色点 中间颜色的位置,结束点颜色) ...
- MySQL命令记录1
mysql命令行 开启:net start mysql56关闭:net start mysql56(这两种情况必须有管理员权限) 登陆:mysql -h localhost -u root -p(lo ...
- 恶补ASP.NET基础【1】委托
委托(delegate)是一种可以把引用存储为函数的类型. 委托的声明类似于函数,但不带函数体,且要使用delegate关键字,委托的声明指定了一个返回类型和一个参数列表. 在定义了委托之后,就可以声 ...
- 定制化Azure站点Java运行环境(2)
Azure Website上发布Java web应用 在Azure站点上发布Java Web应用非常简单,可以使用git从源代码发布,也可以使用FTP/FTPs直接发布,本节介绍FTP方式. 准备好你 ...
- 再次优化NGINX+php-fpm上传
上次写了一篇nginx+php-fpm优化上传,一位博友留言介绍了,第三方nginx upload module http://www.grid.net.ru/nginx/upload.en.html ...
- Nginx 配置指令的执行顺序(九)
紧接在 server-rewrite 阶段后边的是 find-config 阶段.这个阶段并不支持 Nginx 模块注册处理程序,而是由 Nginx 核心来完成当前请求与 location 配置块之间 ...
- Inno Setup设定只运行一个安装包
原文 http://zwkufo.blog.163.com/blog/static/25882512010292526944/?suggestedreading&wumii 在安装包中,经常会 ...
- Matalab之模糊KMeans原理
对Kmeans方法相信大家都会不陌生,这是一种广泛被应用的基于划分的聚类算法.首先对它的核心思想做一个简单的介绍: 算法把n个向量xj(1,2…,n)分为c个组Gi(i=1,2,…,c),并求每组的聚 ...