2011-02-08 147 views
2

我想概括一個構建系統在幾個(有點類似)的平臺上編譯。什麼是確定運行shell腳本或Makefile的主機類型的好方法。我想區分mac和linux,,但也有不同的linux(如RHEL,Ubuntu)的特定發行版。 Cygwin對我來說並不重要,但如果你將它包含在你的回覆中,我相信別人會覺得它很有價值。Linux/Mac:編譯時確定平臺的好方法是什麼?

基本原理可能包括使用主機類型來獲取並安裝正確版本的二進制軟件包,這比從源代碼編譯更方便。另外,一些商業軟件是針對特定發行版進行二進制打包的,因此其中一部分動機是抓住正確的二進制文件。

感謝,

的setjmp

+0

如果你必須知道你正在使用的發行版,你的方法有些問題。 – user562374 2011-02-08 20:57:14

+0

@ user562374某些軟件是商業和/或打包用於特定發行版。另外 – SetJmp 2011-02-09 18:39:52

回答

2

UNAME -a區分主要* nix的變種

不是很確定什麼是最好的方法來區分紅帽Ubuntu的距離將是 - 可以尋找包管理工具並查詢已安裝的軟件包,最終幫助您縮小不同的Debian衍生產品等等。但可能有些更明顯的事情。

2

linux變體通常將發行版信息存儲在/ etc/issue中。

大多數內核將會把信息在/ proc /版本

1

這並不完全明瞭。您可以使用uname來查找常規參數,但區分分佈是一件比較困難的任務。也許你應該考慮使用像autoconf這樣的東西來概括你的構建系統?

0

萬一你使用Qt,有這非常好的集定義的,Q_OS_ *,是指導你的操作系統,你正在編譯於:

Q_OS_AIX 
Q_OS_BSD4 
Q_OS_BSDI 
Q_OS_CYGWIN 
Q_OS_DARWIN 
Q_OS_DGUX 
Q_OS_DYNIX 
Q_OS_FREEBSD 
Q_OS_HPUX 
Q_OS_HURD 
Q_OS_IRIX 
Q_OS_LINUX 
Q_OS_LYNX 
Q_OS_MAC 
Q_OS_MSDOS 
Q_OS_NETBSD 
Q_OS_OS2 
Q_OS_OPENBSD 
Q_OS_OS2EMX 
Q_OS_OSF 
... 

它們在QtGlobal定義。甚至有定義可以幫助你找出使用Q_CC_ *的編譯器或者目標窗口系統Q_WS_ *。

但是,如果你不使用Qt並且想要使用通用方法,那麼最有可能必須回退到Autotools包或CMake

確定Linux發行版非常棘手,但並不難。您首先必須弄清楚您關心的分佈,然後針對您選擇的分佈進行各種分佈特定的文件/配置檢查,如this example,因爲您無法真正支持所有可用的Linux發行版的。 :-)

至於Mac方面,我會讓Mac專家回答,但它不應該那麼難,因爲至少多元化問題是不可能的。

相關問題