2013-02-09 49 views
8

我正在編寫一個C++庫,可以在Mac和Linux上使用C++和Python。所以我決定爲我的項目使用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()。在你的榜樣,你可以添加一個安裝規則是這樣的:

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

一旦有一個CMakeList任何install()命令,CMake的會產生install目標可贖回爲make install

+0

非常感謝。我將添加一個答案來顯示整個命令。 – 2013-02-10 10:12:25

+0

想知道如何動態生成該變量名稱......儘管我期待,'$ {SWIG_MODULE _ $ {PROJECT_NAME} _REAL_NAME}似乎可以工作! – Melebius 2016-09-20 10:40:34

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將指向一個系統文件夾,不使用前綴... – 2013-10-18 00:25:49

+0

我在libftdi python CMakeLists.txt文件中找到了答案。我不明白這一點足以迴應任何更新,但對於任何人也有興趣檢查http://developer.intra2net.com/git/?p=libftdi;a=blob;f=python/CMakeLists.txt; h = 93410544fac2a45eec51cb8dd344708b3bbdfe67; hb = HEAD – 2013-10-18 01:21:37

+0

此行爲與Python世界中的預期一致。該庫被安裝到一個天真的調用python的環境中。這可以讓你安裝到當前激活的virtualenv或你有什麼。 – 2016-07-11 18:44:48