2016-11-23 6 views
0

При попытке скомпилировать мое программное обеспечение в Mac OS Sierra Я столкнулся с проблемой неизвестных прагм (см. Ниже ниже). По словам коллеги, программное обеспечение может компилироваться в Mac OS X Yosemite с той же версией clang (4.2.1). Используемые флаги для компиляции: -std=c++11 -stdlib=libc++. Использование stdlibc++ не является опцией, поскольку оно не включает std::shared_ptr.Неизвестная группа предупреждения '-Wmaybe-unintialized' Mac OS Sierra

error: unknown warning group '-Wmaybe-uninitialized', ignored 
    [-Werror,-Wunknown-pragmas] 
        #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" 

Вот распечатку g++ --version

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 8.0.0 (clang-800.0.42.1) 
Target: x86_64-apple-darwin16.1.0 
Thread model: posix 
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin 

Неуверенные, где взять его отсюда, любой вход высоко ценится.

+2

На MacOS стандартный компилятор Clang, который * в основном * совместим с GCC. Команда 'g ++' является просто псевдонимом для 'clang ++'. Если вам требуется конкретное поведение GCC (например, прагма, которую вы показываете), я предлагаю условную компиляцию для этих частей. –

+0

Благодарим вас за ответ @Someprogrammerdude. Хорошо, программное обеспечение скомпилировано с помощью 'cmake', где и я, и мой коллега используют ту же конфигурацию' cmake', пока его работы и мои нет. Есть ли существенная разница между Yosemite и Sierra в терминах версий clang и библиотек, которые могут помешать «-Wmaybe-uninitialized» и заставить его терпеть неудачу при компиляции? – Philip

ответ

0

Вместо того чтобы писать

#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" 

вы должны сделать

#if !defined(__has_warning) || __has_warning("-Wmaybe-uninitialized") 
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" 
#endif