2011-08-15 84 views
8

我注意到在MacOS X(Lion)中,未定義宏__unix__。 因爲MacOS的根源在於BSD UNIX,不應該這樣嗎?Macro __unix__`未在MacOS中定義X

是否有可能讓編譯器/預處理器知道我希望它被認爲是UNIX系統?

+0

你可能有更多的運氣與POSIX宏代替http://sourceforge.net/apps/mediawiki/predef /index.php?title=Standards#Unix_Standards – Flexo

回答

10

predefined macros site建議使用:

#if defined(unix) || defined(__unix__) || defined(__unix) 
# define PREDEF_PLATFORM_UNIX 
#endif 

爲了區分UNIX系統。他們還有一些關於一些編譯器的警告,這些編譯器沒有設置任何這些編譯器。根據你爲什麼關心平臺是什麼,你可能會更好地查看配置時間(在configure.ac或任何你使用的構建系統)。

+5

./configure不是通用的。實際上,它主要用於Unix和類Unix平臺。使用它來檢測「Unix」平臺對我來說聽起來不太合適。 –

+0

這是普遍的,如果你寫你自己的。您可以爲幾乎任何重要的構建系統編寫自己的或等效的組件。在CMake中,您在CMakeLists.txt中編寫測試,在您編寫configure.ac中測試的autotools中,在ant中您可以在XML中執行類似測試。我相信Scons也有類似的概念,就像Python的distutils一樣。 – Flexo

+1

在Windows上,你沒有默認安裝Bash,你怎麼能./configure?我的另一個觀點是,./configure基本上是Unixy的一開始:使用它來檢測Unix就像追逐尾巴。 –

7

我認爲this site給出了最全面的答案。

總之,包括蘋果的平臺,共同Unix平臺上,你將需要:

#if defined(__unix__) || defined(__unix) || \ 
     (defined(__APPLE__) && defined(__MACH__)) 
... 
#endif