zoukankan      html  css  js  c++  java
  • 生成简单的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.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 .

    本文github地址:

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

    欢迎补充 

  • E-Mail : Mike_Zhang@live.com
  • 转载请注明出处,谢谢!
查看全文
  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/genMakefileTest1.html
  • Copyright © 2011-2022 走看看