生成简单的Makefile文件(Python实现)

在linux下写几个测试程序,还要一行行的输入g++命令进行编译,当经常改测试代码的时候,那一次次的敲(或者一次次的上线箭头选)也感觉不爽,不如make来的快。用Makefile的好处就不用多说了,这里我写了个脚本,其功能是自动搜索当前目录(不包括子目录)下的“.c”文件生成Makefile文件。
代码在这里,功能有限(适用于单个文件是一个独立的测试代码的情况),需要的朋友可以稍作修改以满足需求。

 1 #! /usr/bin/python
2 '''
3 File : genMakefile.py
4 Author : Mike
5 E-Mail : Mike_Zhang@live.com
6 '''
7 import os
8
9 def genMakefileStr(dir,surfix = '.c'):
10 msg = ''
11 msg = msg + 'CC = gcc' + '\n'
12 msg = msg + 'CFLAGS = -g -O2 -Wall' + '\n\n'
13
14 fList = []
15 for dirPath,dirNames,fileNames in os.walk(dir):
16 for file in fileNames:
17 name,extension = os.path.splitext(file)
18 if extension == surfix:
19 fList.append(name)
20 break # only search the current directory
21 str1 = 'all:\n'
22 str2 = ''
23 str3 = 'clean:\n'
24 for f in fList:
25 str1 = str1 + '\tmake ' + f + '\n'
26 str2 = ('%s%s:%s.o\n') % (str2,f,f)
27 str2 = ('%s\t$(CC) -o %s %s.o\n\n') % (str2,f,f)
28 str3 = ('%s\trm -f %s\n') % (str3,f)
29 str3 = str3 + '\trm -f *.o\n'
30 strClean = '.c.o:\n\t$(CC) $(CFLAGS) -c -o $*.o $<\n'
31 msg = ('%s%s\n%s\n%s\n%s') % (msg,str1,str2,str3,strClean)
32 #print 'msg : \n'
33 #print msg
34 return msg
35
36 if __name__ == '__main__':
37 str = genMakefileStr('.','.c')
38 file = open("Makefile","w")
39 file.write(str)
40 file.close()
41 print str

运行效果如下(示例):

 1 # ./genMakefile.py          
2 CC = gcc
3 CFLAGS = -g -O2 -Wall
4
5 all:
6 make pfun1
7 make pfun2
8
9 pfun1:pfun1.o
10 $(CC) -o pfun1 pfun1.o
11
12 pfun2:pfun2.o
13 $(CC) -o pfun2 pfun2.o
14
15
16 clean:
17 rm -f pfun1
18 rm -f pfun2
19 rm -f *.o
20
21 .c.o:
22 $(CC) $(CFLAGS) -c -o $*.o $<

运行脚本后进行make即可。

附:

感觉上面的那个脚本用着不方便,随后修改修改,代码如下:

#! /usr/bin/python
'''File      : genMakefile.pyAuthor    : MikeE-Mail    : Mike_Zhang@live.com
'''
import os,syssurfix = ['.c','.cpp']def genMakefileStr(dir):msg = ''msg = msg + 'CC = g++ ' + '\n'msg = msg +  'CFLAGS = -g -O2 -Wall' + '\n\n'fList = []for dirPath,dirNames,fileNames in os.walk(dir):for file in fileNames:name,extension = os.path.splitext(file)if surfix.count(extension) > 0:fList.append(name)break # only search the current directorystr1 = 'all:\n'str2 = ''str3 = 'clean:\n'for f in fList:str1 = str1 + '\tmake ' + f + '\n'str2 = ('%s%s:%s.o\n') % (str2,f,f)str2 = ('%s\t$(CC) -o %s %s.o\n\n') % (str2,f,f)str3 = ('%s\trm -f %s\n') % (str3,f)str3 = str3 + '\trm -f *.o\n'strClean = '.c.cpp.o:\n\t$(CC) $(CFLAGS) -c -o $*.o $<\n'msg = ('%s%s\n%s\n%s\n%s') % (msg,str1,str2,str3,strClean) #print 'msg : \n'#print msgreturn msgif __name__ == '__main__':for arg in sys.argv[1:]:print argstr = genMakefileStr(arg)if arg[-1] == '/':arg = arg[:-1]file = open(arg+"/Makefile","w")file.write(str)file.close()print str

把文件genMakefile.py改名为genMakefile,复制到/usr/local/bin下,以后在需要的目录里面执行如下命令即可:

genMakefile .

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2011/生成简单的Makefile文件(Python实现).txt

欢迎补充 

转载于:https://www.cnblogs.com/MikeZhang/archive/2012/01/17/genMakefileTest1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 800. 相似 RGB 颜色

文章目录1. 题目2. 解题2.1 暴力枚举2.2 独立枚举1. 题目 RGB 颜色用十六进制来表示的话&#xff0c;每个大写字母都代表了某个从 0 到 f 的 16 进制数。 RGB 颜色 “#AABBCC” 可以简写成 “#ABC” 。例如&#xff0c;"#15c" 其实是 “#1155cc” 的简写。 现在&a…

mysql 图片base64_关于图片的Base64编码

什么是Base64编码Base64编码是一种图片处理格式&#xff0c;通过特定的算法将图片编码成一长串字符串&#xff0c;在页面上显示的时候&#xff0c;可以用该字符串来代替图片的url属性。base64编码就是长得像下面这样子的代码&#xff1a;thunder://QUFodHRwOi8vd3d3LmJhaWR1LmN…

LeetCode 243. 最短单词距离

文章目录1. 题目2. 解题1. 题目 给定一个单词列表和两个单词 word1 和 word2&#xff0c;返回列表中这两个单词之间的最短距离。 示例: 假设 words ["practice", "makes", "perfect", "coding", "makes"] 输入: word1 “…

mysql load character_mysql load data Invalid utf8mb4 character string: ”

使用mysql的 load data 导入数据到 数据库中&#xff1a;LOAD DATA LOCAL INFILE /tmp/2982/20200424/user.csvINTO TABLE t_user CHARACTER SET utf8mb4 FIELDS TERMINATED BY ,LINES TERMINATED BY \r\nIGNORE 1 LINES(userName, userNo, age, homeAddr)SET province 浙江省…

LeetCode 1426. 数元素(哈希set)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr&#xff0c; 对于元素 x &#xff0c;只有当 x 1 也在数组 arr 里时&#xff0c;才能记为 1 个数。 如果数组 arr 里有重复的数&#xff0c;每个重复的数单独计算。 示例 1&#xff1a; 输入&#xff1a;arr [1,2,3] …

mysql 默认page大小_MySQL innodb_page_size

原标题&#xff1a;MySQL innodb_page_size墨墨导读&#xff1a;Page是MySQL Innodb存储的最基本结构&#xff0c;也是Innodb磁盘管理的最小单位&#xff0c;了解page的一些特性&#xff0c;可以更容易理解MySQL。innodb_page_size作为innodb和OS交互单位。文件系统对文件的buf…

控制台中使用cstring和string

VC 6.0 控制台&#xff1a; 1、使用string   #include <string>using namespace std; 2、使用 cstring 首先设置"在共享 DLL 中使用 MFC"&#xff0c;然后 #include <afx.h>VS2003 控制台 1、使用string using namespace std; 2、使用csting   #incl…

LeetCode 266. 回文排列(计数)

文章目录1. 题目2. 解题1. 题目 给定一个字符串&#xff0c;判断该字符串中是否可以通过重新排列组合&#xff0c;形成一个回文字符串。 示例 1&#xff1a; 输入: "code" 输出: false示例 2&#xff1a; 输入: "aab" 输出: true示例 3&#xff1a; 输入…

centos6.5装mysql好难_CentOS6.5 下MySQL傻瓜式安装

为了为服务器上装mysql我先在虚拟机上练习了一下特此记录并分享;注:参考文章https://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html1.测系统是否自带安装mysql[rootwzpbk~]#rpm -qa | grep mysql  // 这个命令就会查看该操作系统上是否已经安装了mysql数…

Java 中实现定时服务 在ssh框架中跟普通工程里面创建的方式

http://www.iteye.com/topic/1119730转载于:https://www.cnblogs.com/caixiaoqiu/archive/2012/02/03/2336818.html

LeetCode 1150. 检查一个数是否在数组中占绝大多数(二分查找)

文章目录1. 题目2. 解题2.1 暴力2.2 二分查找1. 题目 给出一个按 非递减 顺序排列的数组 nums&#xff0c;和一个目标数值 target。 假如数组 nums 中绝大多数元素的数值都等于 target&#xff0c;则返回 True&#xff0c;否则请返回 False。 所谓占绝大多数&#xff0c;是指…

mysql 常用注入命令_SQL注入常用命令

1. 数据库查询版本Mssql select versionMysql select vresion()/select versionoracle select banner from &#xffe5;versionPostgresql select version()2. 数据库常用命令库操作连接数据库 mysql -u 用户名 -p创建数据库&#xff1a;create database 数据库名称、删除数据…

VirtualBox的Linux虚拟机访问Windows7的文件

第一步&#xff1a; 安装 VirtualBox 增强工具 点击确定&#xff0c;稍等片刻&#xff0c;VirtualBox 的增强功能就可以安装完毕。 第2步&#xff1a;设置要共享给Linux 虚拟机的文件夹&#xff08;目录&#xff09; 点击右下角的“分配数据空间” 点击“添加” 选择要共享的路…

LeetCode 1118. 一月有多少天(闰年判断)

文章目录1. 题目2. 解题1. 题目 指定年份 Y 和月份 M&#xff0c;请你帮忙计算出该月一共有多少天。 示例 1&#xff1a; 输入&#xff1a;Y 1992, M 7 输出&#xff1a;31示例 2&#xff1a; 输入&#xff1a;Y 2000, M 2 输出&#xff1a;29示例 3&#xff1a; 输入&am…

vue warning如何去掉_详解 vue 组件三大核心概念

前言本文主要介绍属性、事件和插槽这三个vue基础概念、使用方法及其容易被忽略的一些重要细节。如果你阅读别人写的组件&#xff0c;可以从这三个部分展开&#xff0c;它们可以帮助你快速了解一个组件的所有功能。本文的代码请猛戳https://github.com/ljianshu/Blog&#xff0c…

碰撞代码

碰撞代码&#xff1a;if(CGRectContainsPoint(sprite.boundingBoy, touchLocation)){[self checkTheSprites:sprite]} 转载于:https://www.cnblogs.com/ligun123/archive/2012/02/08/2343035.html

LeetCode 1133. 最大唯一数

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 A&#xff0c;请找出并返回在该数组中仅出现一次的最大整数。 如果不存在这个只出现一次的整数&#xff0c;则返回 -1。 示例 1&#xff1a; 输入&#xff1a;[5,7,3,9,4,9,8,3,1] 输出&#xff1a;8 解释&#xff1a; 数组…

firewall mysql端口_Centos7 firewall开放3306端口

Centos7 firewall开放3306端口在 Centos 7 中防火墙由 firewalld 来管理&#xff0c;而不是 iptables。1. 查看防火墙状态firewall-cmd --state ## 结果显示为running或not running2. 关闭防火墙firewallsystemctl stop firewalld.servicesystemctl disable firewalld.service3…

技术演讲的技巧和经验

导读&#xff1a;如果你在编程大会上发表演讲&#xff0c;不论是开放式的BarCamp或是像OSCON那样精心组织的大型会议&#xff0c;你只有很短的一段时间将脑中的信息传达给听众&#xff0c;所以请仔细把握。 技术会议的成本非常昂贵&#xff0c;不仅仅是经济上的成本。即使像Bar…

如何使用kali来进行一次ddos攻击

本文章用于记录自己的学习路线&#xff0c;不用于其他任何途径! ! ! 哈喽啊&#xff01;又是好久不见&#xff0c;本博主在之前发过一个ddos攻击的介绍。 emm…虽然那篇文章也提到了ddos攻击的方式&#xff0c;但太过于简陋&#xff0c;好像也没有什么用&#xff0c;so&#…