2016-11-23 77 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標準的編譯器是鐺,這是* *大多與GCC兼容。 'g ++'命令只是'clang ++'的別名。如果您需要GCC特定的行爲(如您顯示的編譯指示),那麼我建議對這些部分進行條件編譯。 –

+0

謝謝你的回覆@Someprogrammerdude。好的,這個軟件是用'cmake'編譯的,我和我的同事都在使用相同的'cmake'配置,而他的作品和我的作品都沒有。在cla versions版本和庫中,Yosemite和Sierra之間是否有任何顯着的區別,可能會影響「-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