Flatbuffers的编译器有个-c参数选项,这个选项需要一个个传入.fbs文件的路径,给维护带来很大的不便。昨晚改了下flatbuffers的编译器代码,把cpp代码生成器生成的部分变量名以及生成的cxx文件后缀改掉了,这样看起来违和感没那么强,符合Coeus的代码风格。本来也想把-c选项改成支持’‘通配符的,这样便可以肆无忌惮地给出一个目录让编译器自己去遍历.fbs文件。但回头一想这似乎不应该是编译器做的事情,所以就把这个想法搁掉了。于是写了个简单的python脚本(2.7.x),用来维护fbs文件并且把生成的cxx文件输出到指定目录。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#Author By AngryPowman
#Copyright 2014 Coeus

import os
import glob

FBS_COMPILER = os.path.abspath("./tools/flatc.exe")
FBS_PATH = "./fbs/*.fbs"
FBS_CXX_OUTPUT = "./protocol/"
FBS_FILES = ''

def search(path) :
global FBS_FILES
for filename in glob.glob(path):
if os.path.isdir(filename):
search(filename)
else:
base_file_name = os.path.basename(filename)
FBS_FILES += filename + ' '
print filename

if __name__ == '__main__':
#search files
search(FBS_PATH)
#compile
print "FBS Environment :"
print " >> FBS_COMPILER : " + FBS_COMPILER
print " >> FBS_PATH : " + FBS_PATH
print " >> FBS_CXX_OUTPUT : " + FBS_CXX_OUTPUT
print " >> FBS_FILES : " + FBS_FILES

#create output directory if not exists
if not os.path.exists(FBS_CXX_OUTPUT):
os.makedirs(FBS_CXX_OUTPUT)

result = os.system(FBS_COMPILER + " -o " +FBS_CXX_OUTPUT + " -c " + FBS_FILES)
if result == 0:
print "Compiled Okay!"
else:
print "Failed to compile, errorcode = " + str(result)

相关的环境变量都在最顶部定义,没啥版权,可以按需修改:)