【问题标题】:cmake, swig and python: How to override conflicting symbolscmake、swig 和 python:如何覆盖冲突的符号
【发布时间】:2013-04-16 07:18:55
【问题描述】:

我正在使用 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

感谢您的帮助!

维萨

【问题讨论】:

    标签: python cmake swig


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多