Mam Python C++, która wymaga rozszerzenia następujące flagi kompilacji gdy skompilowany przy użyciu szczęk na OSX:Jak stwierdzić, który kompilator zostanie wywołany dla rozszerzenia Python C w setuptools?
CPPFLAGS='-std=c++11 -stdlib=libc++ -mmacosx-version-min=10.8'
LDFLAGS='-lc++'
Wykrywanie OSX w moim setup.py jest dość prosta. Mogę to zrobić:
if sys.prefix == 'darwin':
compile_args.append(['-mmacosx-version-min=10.8', '-stdlib=libc++'])
link_args.append('-lc++')
(Zobacz https://github.com/honnibal/spaCy/blob/ba1d3ddd7f527d2e6e41b86da0f2887cc4dec83a/setup.py#L70 pełnego kontekstu)
Jednak ta flaga na GCC kompilacji jest nieprawidłowy. Tak więc kompilacja nie powiedzie się, jeśli ktoś spróbuje użyć GCC na OSX, jeśli napiszę plik setup.py w ten sposób.
GCC i clang obsługują różne flagi kompilatora. Tak więc, muszę wiedzieć, który kompilator zostanie wywołany, więc mogę wysyłać różne flagi. Jaki jest właściwy sposób wykrywania kompilatora w pliku setup.py?
Edit 1:
Należy pamiętać, że żaden wyjątek Python jest podniesiona za błędy kompilacji:
$ 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
$
Jaki wyjątek ma miejsce (w skrypcie w języku Python), gdy GCC jest błędną flagą? Właściwą metodą byłoby 'try: send_flags_for_clang() z wyjątkiem ThatException: send_flags_for_gcc()'. –
Zobacz Edycja --- żaden wyjątek nie został zgłoszony. –