Ben OSX üzerinde clang kullanılarak derlenmiş aşağıdaki derleme bayrakları gerektiren bir Python C++ uzantısına sahip:Kurulum programında bir Python C uzantısı için hangi derleyicinin çağrılacağını nasıl anlarsınız?
CPPFLAGS='-std=c++11 -stdlib=libc++ -mmacosx-version-min=10.8'
LDFLAGS='-lc++'
Tespit OSX benim setup.py dosyası yeterince kolaydır. Ben bunu yapabilirsiniz:
if sys.prefix == 'darwin':
compile_args.append(['-mmacosx-version-min=10.8', '-stdlib=libc++'])
link_args.append('-lc++')
Ancak GCC bu derleme bayrak geçersiz (tam bağlam için https://github.com/honnibal/spaCy/blob/ba1d3ddd7f527d2e6e41b86da0f2887cc4dec83a/setup.py#L70 bakınız). Yani, eğer setup.py bu şekilde yazıyorsam, birisi OSX'te GCC kullanmaya çalışıyorsa derleme başarısız olur.
GCC ve clang farklı derleyici bayraklarını destekler. Yani hangi derleyicinin çağrılacağını bilmem gerekiyor, böylece farklı bayraklar gönderebiliyorum. Derleyici'yi setup.py'de tespit etmenin doğru yolu nedir?
Düzenleme 1: hayır Python istisna derleme hataları için yükseltilir olduğunu
Not: Ben anahtarın aynı tür ihtiyaç olarak
$ python setup.py build_ext --inplace
running build_ext
building 'spacy.strings' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -c spacy/strings.cpp -o build/temp.linux-x86_64-2.7/spacy/strings.o -O3 -mmacosx-version-min=10.8 -stdlib=libc++
gcc: error: unrecognized command line option ‘-mmacosx-version-min=10.8’
gcc: error: unrecognized command line option ‘-stdlib=libc++’
error: command 'gcc' failed with exit status 1
$
GCC'yi kötü bir bayrağa geçirdiğinizde (Python betiğinizde) hangi özel durum gerçekleşir? ThatException: send_flags_for_gcc() 'dışında doğru yol: try: send_flags_for_clang() olacaktır. –
Bkz. Düzen --- özel durum kaldırılmaz. –