1

私はcmakeを使ってswigでpythonラッパーを作成しています。問題は、lapack と python に競合するシンボルがあることです。コンパイル前に競合するシンボルを定義解除する簡単なスクリプトがあり、機能するメイクファイルを作成できます。私は、cmakeを使用するときに取るべき最善のアプローチは何だろうと思っています。

このメイクファイルは動作します:

tools_wrap.cc toolspy: tools.i ../libtools.a
    swig -I../ -c++ -python $(PYFLAGS) -shadow -o tools_wrap_tmp.cc tools.i 
    # A terrible hack to override conflicting function names in python and lapack
    python ./fix_undefs.py < tools_wrap_tmp.cc > tools_wrap.cc

_tools.so: tools_wrap.cc ../libtools.a
     $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(PYTHONINC) $(INCLUDES) -I../ tools_wrap.cc $(LIBS) -o _tools.so

助けてくれてありがとう!

ベサ

4

1 に答える 1

1

cmake swig-generator をいじった後、次の解決策にたどり着きました。

add_custom_target(TmpCWrap mv ${swig_generated_file_fullname} tmp.cxx 
    DEPENDS "${swig_generated_file_fullname}")

add_custom_target(FixDefs python ${CMAKE_CURRENT_SOURCE_DIR}/add_undefs.py < tmp.cxx > ${swig_generated_file_fullname}
    DEPENDS TmpCWrap
    COMMENT "Fixing defs for conflicting symbols in lapack and python")

add_dependencies(${SWIG_MODULE_PPToolbox_REAL_NAME} FixDefs)
于 2013-04-17T08:28:21.693 に答える