cmake、swig和python:如何覆盖冲突符号

cmake、swig和python:如何覆盖冲突符号,python,cmake,swig,Python,Cmake,Swig,我正在使用cmake创建一个带有swig的python包装器。问题是,lapack和python中存在冲突的符号。我有一个简单的脚本来在编译之前取消定义冲突的符号,我可以编写一个有效的makefile。我想知道,当使用cmake时,最好的方法是什么 此makefile可以工作: tools_wrap.cc toolspy: tools.i ../libtools.a swig -I../ -c++ -python $(PYFLAGS) -shadow -o tools_wrap_tmp.

我正在使用cmake创建一个带有swig的python包装器。问题是,lapack和python中存在冲突的符号。我有一个简单的脚本来在编译之前取消定义冲突的符号,我可以编写一个有效的makefile。我想知道,当使用cmake时,最好的方法是什么

此makefile可以工作:

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
tools\u wrap.cc toolspy:tools.i../libtools.a
swig-I../-c++-python$(PYFLAGS)-shadow-ools\u wrap\u tmp.cc tools.I
#在python和lapack中重写冲突函数名是一个可怕的黑客行为
python./fix_undefs.pytools_wrap.cc
_tools.so:tools_wrap.cc../libtools.a
$(CXX)$(cxflags)$(LDFLAGS)-共享$(PYTHONINC)$(包括)-I../tools\u wrap.cc$(LIBS)-o\u tools.so
谢谢你的帮助


Vesa

在拨动cmake swig发生器之后,我得出了以下解决方案:

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)
add_custom_target(TmpCWrap mv${swig_generated_file_fullname}tmp.cxx
取决于“${swig\u生成的\u文件\u全名}”)
添加自定义目标(fixtefs python${CMAKE\u CURRENT\u SOURCE\u DIR}/add\u undfs.py${swig\u generated\u file\u fullname}
取决于TmpCWrap
注释“修复lapack和python中冲突符号的def”)
添加依赖项(${SWIG\u模块\u PPToolbox\u REAL\u NAME}FixDefs)

在拨动cmake swig生成器之后,我得出了以下解决方案:

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)
add_custom_target(TmpCWrap mv${swig_generated_file_fullname}tmp.cxx
取决于“${swig\u生成的\u文件\u全名}”)
添加自定义目标(fixtefs python${CMAKE\u CURRENT\u SOURCE\u DIR}/add\u undfs.py${swig\u generated\u file\u fullname}
取决于TmpCWrap
注释“修复lapack和python中冲突符号的def”)
添加依赖项(${SWIG\u模块\u PPToolbox\u REAL\u NAME}FixDefs)