Python实现生成简单的Makefile文件代码示例


Posted in Python onMarch 10, 2015

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

代码在这里,功能有限(适用于单个文件是一个独立的测试代码的情况),需要的朋友可以稍作修改以满足需求。

#! /usr/bin/python

'''

 File      : genMakefile.py

 Author    : Mike

 E-Mail    : Mike_Zhang@live.com

'''

import os
def genMakefileStr(dir,surfix = '.c'):

    msg = ''

    msg = msg + 'CC = gcc' + '\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 extension == surfix:

                fList.append(name)

        break # only search the current directory

    str1 = '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.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 msg

    return msg
if __name__ == '__main__':

    str = genMakefileStr('.','.c')

    file = open("Makefile","w")

    file.write(str)

    file.close()

    print str

运行效果如下(示例):

# ./genMakefile.py          

CC = gcc

CFLAGS = -g -O2 -Wall
all:

        make pfun1

        make pfun2
pfun1:pfun1.o

        $(CC) -o pfun1 pfun1.o
pfun2:pfun2.o

        $(CC) -o pfun2 pfun2.o


clean:

        rm -f pfun1

        rm -f pfun2

        rm -f *.o
.c.o:

        $(CC) $(CFLAGS) -c -o $*.o $<

运行脚本后进行make即可。

附:

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

#! /usr/bin/python

'''

  File      : genMakefile.py

  Author    : Mike

  E-Mail    : Mike_Zhang@live.com

'''

import os,sys

 

surfix = ['.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 directory

    str1 = '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 msg

    return msg

 

if __name__ == '__main__':

    for arg in sys.argv[1:]:

        print arg

    str = 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 .

Python 相关文章推荐
Python手机号码归属地查询代码
May 04 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
python图像处理入门(一)
Apr 04 Python
详解Python字符串切片
May 20 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
python实现的读取网页并分词功能示例
Oct 29 Python
Python 支持向量机分类器的实现
Jan 15 Python
Python实现发票自动校核微信机器人的方法
May 22 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
详解python字符串驻留技术
May 21 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 #Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 #Python
Python脚本实现代码行数统计代码分享
Mar 10 #Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 #Python
Python自动化构建工具scons使用入门笔记
Mar 10 #Python
Python操作CouchDB数据库简单示例
Mar 10 #Python
Python性能优化技巧
Mar 09 #Python
You might like
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
学习ExtJS table布局
2009/10/08 Javascript
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
基于canvas实现手写签名(vue)
2020/05/21 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
应届生.NET方向面试题
2015/05/23 面试题
项目负责人任命书
2014/06/04 职场文书
安全口号大全
2014/06/21 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
党员作风建设整改方案
2014/10/27 职场文书
春季运动会开幕词
2015/01/28 职场文书
高中社区服务活动报告
2015/02/05 职场文书
暑期实践个人总结
2015/03/06 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技
Spring Boot实现文件上传下载
2022/08/14 Java/Android