2013-02-09 22 views
8

MacとLinuxでC++とPythonの両方から使用できるC++ライブラリを作成しています。だから私は自分のプロジェクトにCMakeとSWIGを使うことに決めました。CMake + SWIG + Pythonで `make install`を実行

SWIG 2.0のマニュアルにも記載されているように、SWIGとCMakeの組み合わせもMacでうまく動作します。 http://www.swig.org/Doc2.0/SWIGDocumentation.html#Introduction_build_system

しかし、私はmake installについて質問があります。

cmake .makeと入力した後、_example.soが正常に生成されました。しかし、make installは自動生成されたMakefileにinstallターゲットがないため動作しません。 Makefileにinstallターゲットを追加する方法を知りたい。私は_example.soを各システムのsite-packagesディレクトリの下にインストールしたいと思います。

誰かが上記のリンクで書かれたCMakeの例を変更する方法を教えていただけたら、私は非常に感謝します。

答えて

7

make installへのCMakeインターフェイスは、CMakeコマンドinstall()です。あなたの例では、あなたは次のようにインストールルールを追加することができます。CMakeListのいずれかのinstall()コマンドがあるいったん

install(
    TARGETS ${SWIG_MODULE_example_REAL_NAME} 
    # ... add other arguments to install() as necessary 
) 

は、CMakeのはmake installとして呼び出し可能installターゲットを生成します。

+0

ありがとうございます。コマンド全体を表示するための回答を追加します。 –

+0

その変数名を動的に生成する方法が不思議です...私の期待にもかかわらず、 '$ {SWIG_MODULE _ $ {PROJECT_NAME} _REAL_NAME}'はうまくいくようです! – Melebius

8
find_package(SWIG REQUIRED) 
find_package(PythonLibs REQUIRED) 

include(${SWIG_USE_FILE}) 
set(CMAKE_SWIG_FLAGS "") 
include_directories(${PYTHON_INCLUDE_DIRS}) 

set_source_files_properties(target.i PROPERTIES CPLUSPLUS ON) 
set_source_files_properties(target.i PROPERTIES SWIG_FLAGS "-includeall") 
swig_add_module(target python target.i ${SOURCES}) 
swig_link_libraries(target ${PYTHON_LIBRARIES}) 

execute_process(COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE) 
install(TARGETS _target DESTINATION ${PYTHON_SITE_PACKAGES}) 
install(FILES ${CMAKE_BINARY_DIR}/src/target.py DESTINATION ${PYTHON_SITE_PACKAGES}) 
+0

CMAKE_INSTALL_PREFIXがローカルディレクトリに設定されている場合、どのように動作しますか? PYTHON_SITE_PACKAGESはシステムフォルダを指し、接頭辞は使用しません。 –

+0

libftdi python CMakeLists.txtファイルに答えが見つかりました。私はそれがまだすべてのアップデートで対応するだけでなく、誰も興味を持ってチェックアウトするために十分に理解していないhttp://developer.intra2net.com/git/?p=libftdi;a=blob;f=python/CMakeLists.txt; h = 93410544fac2a45eec51cb8dd344708b3bbdfe67; hb = HEAD –

+0

この動作は、Python世界で予想されているとおりです。 Pythonへの素朴な呼び出しが使用するライブラリが環境にインストールされます。これにより、現在アクティブ化されているvirtualenvにインストールすることができます。 –

関連する問題