Имам разширение на Python C++, което изисква следните флагове за компилация, когато се компилира с clang на OSX:
CPPFLAGS='-std=c++11 -stdlib=libc++ -mmacosx-version-min=10.8'
LDFLAGS='-lc++'
Откриването на OSX в моя setup.py е достатъчно лесно. Мога да го направя:
if sys.prefix == 'darwin':
compile_args.append(['-mmacosx-version-min=10.8', '-stdlib=libc++'])
link_args.append('-lc++')
(Вижте https://github.com/honnibal/spaCy/blob/ba1d3ddd7f527d2e6e41b86da0f2887cc4dec83a/setup.py#L70 за пълен контекст)
В GCC обаче този флаг за компилиране е невалиден. Така че компилирането ще се провали, ако някой се опитва да използва GCC на OSX, ако напиша setup.py по този начин.
GCC и clang поддържат различни флагове на компилатора. Така че трябва да знам кой компилатор ще бъде извикан, за да мога да изпращам различни флагове. Какъв е правилният начин за откриване на компилатора в setup.py?
Редактиране 1:
Имайте предвид, че не се създава изключение на Python за грешки при компилация:
$ 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
$
try: send_flags_for_clang() except ThatException: send_flags_for_gcc()
. - person Two-Bit Alchemist   schedule 21.02.2015