CMake

2009-08-07 33 views
11

ile python site paketleri dizinini bulma Uygulamamı oluşturmak için CMake kullanıyorum. Python site paketleri dizininin bulunduğu yeri nasıl bulabilirim? Python'a bir uzantı derlemek için yola ihtiyacım var. Uygulamamı Linux, Mac ve Windows üzerinde dağıtmayı planlarken, CMake her üç ana işletim sisteminde yolu bulabilmelidir. CMake

İşe etmediği konusunda
include(FindPythonLibs) 
find_path(PYTHON_SITE_PACKAGES site-packages ${PYTHON_INCLUDE_PATH}/..) 

kullanarak çalıştı.

Ben de kabuk üzerinde

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" 

çalıştırarak yolunu elde edebilirsiniz ama CMake dan nasıl çağırmak ki?

ÇÖZÜM:

Teşekkürler, Alex. yüzden bana site paket dir verir komut:

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) 

OUTPUT_STRIP_TRAILING_WHITESPACE komut sondaki yeni satır kaldırmak için gereklidir.

+2

Sadece gelecekteki başvurular için; Bu harika paketi buldum: https://github.com/lyricat/Hotot/tree/master/cmake/modules – dashesy

cevap

6

Harici işlemleri cmake içinde execute_process ile yürütebilirsiniz (ve çıktıyı burada olması gerektiği gibi bir değişkene alabilirsiniz).

+2

Bu bir kesmek gibi görünüyor. Bu hala (altı yıl sonra) gitmek için bir yol mu? –

+1

@TorstenBronger Neden bu bir saldırı mı? CMake bir yerden bilgi almalı, o zaman neden en iyi kim olduğunu sormuyorum. – kynan

+0

FWIW, CMake kullanmaya yönelik niyetim, bu tür şeyleri soyutlamak için kullanmaktır. –

1

Bu uzantıyı dinamik kitaplık yapıyorsanız, get_python_lib(True) kullanmanızı öneririz.

execute_process(
    COMMAND "${PYTHON_EXECUTABLE}" -c "if True: 
    from distutils import sysconfig as sc 
    print(sc.get_python_lib(prefix='', plat_specific=True))" 
    OUTPUT_VARIABLE PYTHON_SITE 
    OUTPUT_STRIP_TRAILING_WHITESPACE) 

Bu PYTHON_SITE ayarlar: Eğer

2
ben lcm için kullanılan

hafifçe güncellenmiş sürümü (bu /usr/lib64 yerine /usr/lib olabilir 64bit linux makinelerinde) platforma özel konumu gerekiyorsa bu ilk parametre true olmalıdır !

install(
    FILES ${mypackage_python_files} 
    DESTINATION ${PYTHON_SITE}/mypackage) 

(mutlak bir yol yüklemeyin Bunu yapmak,atlar edin: gibi kullanıma uygun uygun önek göre yola, hiç.)

+1

Eğer True ise: 'nedir? Sadece kalan 2 satırı girmenize izin vermek için? – kynan

+1

Tam olarak: satır içi betik, çevreleyen CMake kodunun girintisine girmez. – Matthew