2011-06-27 49 views
2

我想讓Makefile能夠在Linux和Solaris中編譯。 我知道如何單獨做到這一點,但我怎樣才能將兩者結合起來,並且能夠檢測到我正在使用的是哪種操作系統? 我正在試圖做一個簡單的C文件 - 但它是編譯器的名稱更改。如何在Linux和Solaris中編譯C?

+0

您確定需要嗎?你是否都在使用gcc? – Foon

+0

@Foon我只知道要在Linux中編譯我做gcc或g ++,而在Solaris中我需要cc。或者我錯了嗎? – drum

+1

在Linux上有一個'cc'(或者'c99',或者'c89',如果你是老式的),它就是連接到'gcc'的地方。默認的編譯器在每個平臺上通過內置在「make」中的默認規則正確選擇的可能性很大。 –

回答

5

GNU Autoconf被設計來解決這個問題很:

的Autoconf是產生shell腳本 自動配置軟件 源代碼包 M4宏的擴展包。這些腳本 可以將這些軟件包適應類UNIX系統的多種類型 ,而無需用戶干預手動 。 Autoconf從模板文件爲 包創建 配置腳本,該模板文件列出 包可使用的操作系統功能,格式爲M4 宏調用。

我已經使用Autoconf自己做了幾個簡單的項目。你可以看看源代碼,看看如何使用autoconf簡單的功能檢測:

注意的Autoconf的目的不是爲了檢測操作系統。相反,它旨在檢測操作系統上可能存在或不存在的功能,設置等。

想到問這個問題:「在此平臺上調用的C編譯器是什麼?」不是「我在Linux或Solaris上運行嗎?」

0

我相信大多數人會說使用一些奇特的autotools的東西。他們當然是對的。

但是......你可以在你的makefile文件中加入如下內容。

OS = `uname -s` 
ifeq ($(OS),Linux) 
    ... 
endif 
ifeq ($(OS),Sun) 
    ... 
endif 
+1

我已經看到了這種方法導致的痛苦。想象一下你想在這個系統下支持一個新的操作系統,你必須通過並手動擴展你的Makefile邏輯來應付......你必須記住哪個操作系統支持哪些功能,並且希望它們永不改變。用這種方法維護了一個大型的應用程序,這真是一場噩夢,Autoconf很難學,但是值得付出努力。檢測功能,而不是操作系統! –