C++'da bir Python uzantısı yazıyorum. Öyle gibi benim setup.py
dosyada kurucu kaynak dosyalarının bir listesini tanımlayarak bunu derlemek: Distutils: C++ uzantısının bir parçası olarak bir Objective-C++ kaynak dosyasını derlemek
extensions = {
'im': [
"im/src/buffer.cpp",
"im/src/detail.cpp",
"im/src/gil.cpp",
"im/src/halideimage.cpp",
"im/src/hybrid.cpp",
"im/src/hybridimage.cpp",
"im/src/options.cpp",
"im/src/pybuffer.cpp",
"im/src/pycapsule.cpp",
"im/src/structcode.cpp",
"im/src/typecode.cpp",
"im/src/module.cpp"
],
}
... Bunlar sonuçta
setup()
işleve
setuptools.Extension
bir örneğini tanımlamak için kullanılır. Bu bir platforma özgü parça eklemek çalıştığında tüm şimdi, kadar, proje boyunca sadece iyi çalıştı vardır: Bu yeni bit derleme için doğru dosyayı seçer ekleyerek ...
preview_source = (sys.platform == 'darwin') and 'im/src/plat/preview_mac.mm' or \
(sys.platform == 'linux') and 'im/src/plat/preview_linux.cpp' or \
(sys.platform == 'win32') and 'im/src/plat/preview_windows.cpp' or \
'im/src/plat/preview.cpp'
extensions = {
'im': [
"im/src/buffer.cpp",
"im/src/detail.cpp",
"im/src/gil.cpp",
"im/src/halideimage.cpp",
"im/src/hybrid.cpp",
"im/src/hybridimage.cpp",
"im/src/options.cpp",
preview_source,
"im/src/pybuffer.cpp",
"im/src/pycapsule.cpp",
"im/src/structcode.cpp",
"im/src/typecode.cpp",
"im/src/module.cpp"
],
}
- ama hiç derlenmeyecektir o distutils
bir gelince hiçbir uzman değilim
error: unknown file type '.mm'
: Mac OS X'te Görünüşe distutils
/setuptools
bir kaynak dosyası olarak “mm” uzantısı tanımıyor 12 setuptools
platforma özel yapılandırma - Bu tek kaynak dosyayı Mac'teki kaynak dosya listesine eklemenin basit bir yolu nedir?
Yaptığım şey ".m" dosyalarının yeniden adlandırılmasıydı ve daha sonra "-x objektif-C++" derleyicinin arşivlerine ekleniyordu - taşınabilir olan bir çözüm (Bence - x' sadece clang-only bir şeydir) ya da uygun değildir (dosyalar esas olarak yanlış adlandırılır). Çözümünüz daha temiz, ama aynı zamanda uzun vadede aynı derecede hoş olmayan bir ses çıkarır… Aslında, problem için gerçek bir çözüm bulmaya devam ediyorum. – fish2000
Bana döndüğün için teşekkürler. .m dosyalarını kullanma sorunu nedir, sadece iyi çalışıyor gibi görünüyor. Şüphelerin halledemediği uzun bir hata gibi görünüyor. 2001'den bir hata raporu + yama (16 yıl önce !!!) buldum: https://mail.python.org/pipermail/distutils-sig/2001-December/002695.html –
Kullanmak zorunda olmanın bir problemi ".m", uygulamanın, Objective-C++ ile birleştirildiği durumlarda - ve bunu yapabildiğiniz gibi - dil ile çeviri birimlerine kolayca dağıtılamaz - Winterfell ile iyi oynamamayan bir tür fahişeyle Xcode veya cmake, vb. Gerçekte, sizin de belirttiğiniz gibi, dünyanın sonu - programcılarının OKB'sini etkilemenin bir sorundur; dosya eki sadece bir referans noktası iken, bir dosya için sahip olduğunuz en güvenilir metadattır. Ama yine de: 16 yıllık böcek, ne? – fish2000