我注意到在MacOS X(Lion)中,未定義宏__unix__
。 因爲MacOS的根源在於BSD UNIX,不應該這樣嗎?Macro __unix__`未在MacOS中定義X
是否有可能讓編譯器/預處理器知道我希望它被認爲是UNIX系統?
我注意到在MacOS X(Lion)中,未定義宏__unix__
。 因爲MacOS的根源在於BSD UNIX,不應該這樣嗎?Macro __unix__`未在MacOS中定義X
是否有可能讓編譯器/預處理器知道我希望它被認爲是UNIX系統?
的predefined macros site建議使用:
#if defined(unix) || defined(__unix__) || defined(__unix)
# define PREDEF_PLATFORM_UNIX
#endif
爲了區分UNIX系統。他們還有一些關於一些編譯器的警告,這些編譯器沒有設置任何這些編譯器。根據你爲什麼關心平臺是什麼,你可能會更好地查看配置時間(在configure.ac
或任何你使用的構建系統)。
./configure不是通用的。實際上,它主要用於Unix和類Unix平臺。使用它來檢測「Unix」平臺對我來說聽起來不太合適。 –
這是普遍的,如果你寫你自己的。您可以爲幾乎任何重要的構建系統編寫自己的或等效的組件。在CMake中,您在CMakeLists.txt中編寫測試,在您編寫configure.ac中測試的autotools中,在ant中您可以在XML中執行類似測試。我相信Scons也有類似的概念,就像Python的distutils一樣。 – Flexo
在Windows上,你沒有默認安裝Bash,你怎麼能./configure?我的另一個觀點是,./configure基本上是Unixy的一開始:使用它來檢測Unix就像追逐尾巴。 –
我認爲this site給出了最全面的答案。
總之,包括蘋果的平臺,共同Unix平臺上,你將需要:
#if defined(__unix__) || defined(__unix) || \
(defined(__APPLE__) && defined(__MACH__))
...
#endif
你可能有更多的運氣與POSIX宏代替http://sourceforge.net/apps/mediawiki/predef /index.php?title=Standards#Unix_Standards – Flexo