我有一些編譯和運行的c代碼,可以從許多不同的unix計算機(各種linux和mac,偶爾是其他計算機)訪問的目錄中,而不同的操作系統顯然需要不同的可執行文件。如何判斷是否爲當前機器編譯了可執行文件?
我有一個簡單的shell腳本調用相應的可執行文件prog.$OSTYPE.$MACHTYPE
,如果需要的話,先編譯它。這非常簡單(儘管它需要使用csh
才能確定$OSTYPE
和$MACHTYPE
的可靠定義),並且它幾乎可行。
然而,事實證明,甚至$OSTYPE
和$MACHTYPE
是不夠的:例如,編譯在OSX 10.5產生一個可執行prog.darwin.i386
其中,在OSX 10.4當被調用時,立即崩潰。
是的,每次我想運行該程序時重新編譯是解決此問題的一種方法,但似乎過多。我知道在每臺機器上都有一個bin
目錄是標準解決方案,但非root用戶可能在其主目錄之外沒有太多的寫入權限(這對所有機器都是通用的)。
所以我的問題是,有沒有更好的方法?編譯器(通常是gcc)顯然知道它編譯的是什麼類型的系統 - 是否有一種很好的可移植的方法來找出我的腳本運行在哪種「系統」上,因此它可以調用正確的可執行文件,而不是一個有未定義的行爲?
如果gcc不存在,'bash --version'同樣會告訴你編譯的目標bash是什麼(並且bash通常在所有系統上存在並正確編譯)。 (這可能與gcc的目標不同) – Matt 2011-04-18 01:18:19
這給出了我想要的信息,但如果它不依賴於gcc,它會更好(儘管這些天可能一切都有gcc)。即使在沒有編譯器的機器上(不要大笑,它是Mac上的可選安裝),對於我的腳本來說,看到另一臺具有相同體系結構的計算機已經生成了可執行文件(現在可以使用)這是你在這種情況下所能達到的最好結果 - 每次都比重新編譯更強大)。 – Matt 2011-04-18 01:34:55