与bjam战斗,你可以测试Scons。有一天,我正在写一个使用boost :: python的应用程序,而Scons帮助我很多。对我来说,一切都更简单。
这里是Sconstruct的例子:
import os, shutil, platform, re
import SCons.Builder
def copyLibBuilder(target, source, env):
'''copy library'''
shutil.copy(str(source[0]), str(target[0]))
return
env = Environment()
env.Append(ENV = {'PATH' : os.environ['PATH'] })
if(platform.system() == "Linux"):
env.Append(CPPPATH = ['/usr/include/python2.7'])
env.Append(LIBPATH = ['/usr/lib/python2.7'])
env.Append(CPPFLAGS = '-Wall -pedantic -pthread -O3 -std=c++0x -lboostpython')
env.Append(LINKFLAGS = '-Wall -pthread')
env.Append(LIBS = [ 'boost_python' ])
elif(platform.system() == "Windows"):
env.Append(CPPPATH = [ Dir('C:/Boost/include/boost-1_52'), # path to installed boost headers
Dir('C:/Python27/include') ]) # path to installed python headers
env.Append(LIBPATH = [ Dir('C:/Boost/lib'), # path to boost library
Dir('C:/Python27/libs') ]) #path to python
env.Append(CPPFLAGS = ' /EHsc /MD /D "WIN32" /D "_CONSOLE" /W4')
env.Append(LINKFLAGS = ' /SUBSYSTEM:WINDOWS ')
else:
print platform.system() + " not supported"
#build C++ library
cpplib = env.SharedLibrary(target = 'sources',
source = ['file1.cpp', 'file2.cpp'])
if(platform.system() == "Linux"):
target = 'my_new_module.so'
elif(platform.system() == "Windows"):
target = 'my_new_module.pyd'
env.Command(target, cpplib, copyLibBuilder)