makefile 太复杂了,学的不精。自己用Python写一个构建工具,经过简单测试,可用
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import argparse
import os
import commands
import re
# .c对应的.o文件
def obj_file_path(srcpath):
return srcpath[:-1] + 'o'
# 检测.[hc]是否比.o文件新
def is_newer_than(src, obj):
srcmtime = os.stat(src).st_mtime
if os.path.exists(obj):
objmtime = os.stat(obj).st_mtime
else:
objmtime = 0
return srcmtime > objmtime
# 检查是否需要重新编译.c文件
def need_compile_src(srcpath):
output = commands.getoutput('{} -MM {}'.format(cc, srcpath))
hlist = output.split(':')[1].strip().split(' ')
hfiles = [h for h in hlist if h.endswith('.h')]
objpath = obj_file_path(srcpath)
# 检查依赖的头文件是否更新了
for h in hfiles:
if is_newer_than(h, objpath):
return True
# 检查源文件是否更新了
if is_newer_than(srcpath, objpath):
return True
# 检查配置文件是否更新了
cfgpath = os.path.abspath('buildconfig')
execpath = os.path.abspath(execname)
if is_newer_than(cfgpath, execpath):
return True
return False
# target build
def bu