下面的文件是從我的一個項目逐字記錄,並應該給你一個想法。 注意它試圖找到鏈接的默認版本的Python。這可能有更好的方法。 如果有不明之處,請隨時在評論中提問。 使用此SConstruct構建的Boost Python模塊稱爲genocpp
。如果你克隆了 項目代碼,假設你使用的是Linux,你應該可以構建它。隨着Windows,它會更困難。
您還可以在線找到該文件https://bitbucket.org/faheem/snppy/src/tip/SConstruct?at=default作爲SNPPy項目代碼的一部分。
#!/usr/bin/python
import commands, glob, os
# Common file, for both executables and Python Interface
common_files = """geno print"""
def pyversion():
pystr = commands.getoutput('python -V')
version = pystr.split(' ')[1]
major, minor = version.split('.')[:2]
return major + '.' + minor
common_base = Split(common_files)
common = [f + ".cpp" for f in common_base]
common_obj = [f+".o" for f in common_base]
# For Python interface only
pif_conv = Split("cppvec_conv cppmap_conv cppset_conv cppunicode_conv")
pif_conv_files = [t+"_pif.cpp" for t in pif_conv]
pif = Split("geno")
pif_files = [t+"_pif.cpp" for t in pif]
# Boost Python Environment
boost_python_env = Environment(
#CXX="g++-4.4",
CPPPATH=["/usr/include/python"+pyversion(), "."],
CXXFLAGS='-ftemplate-depth-100 -fPIC -Wall -Werror -pedantic -pipe -O3 -ffast-math -march=opteron',
CPPDEFINES=['BOOST_PYTHON_DYNAMIC_LIB'],
LIBPATH=["/usr/lib/python"+pyversion()+"/config"],
LIBS=["python"+pyversion(), "m", "boost_python"],
SHLIBPREFIX="", #gets rid of lib prefix
SHOBJSUFFIX = ".bpo"
)
test_env = Environment(
#CXX="g++-4.4",
CXXFLAGS='-Wall -Werror -pedantic -O0 -g',
)
# Build boost python module
boost_python_env.SharedLibrary(target='genocpp', source = common + pif_conv_files + pif_files)
test_env.Program(target='geno_test', source = common + ["geno_test.cpp"])
bjam是構建系統imo的可怕選擇。你可以找到關於如何使用例如scons來構建boost python擴展的教程。這就是我所做的。這不能回答你的問題,我知道。如果你對如何做到這一點有更多的細節感興趣,讓我知道,我會添加一些東西,雖然有線上的例子。 –
是的,我已經發現一些提及scons.s的文章,我會檢查它。但如果你可以在這裏舉一個例子,它可以如何完成它,我會感激。 –