我想讓Makefile能夠在Linux和Solaris中編譯。 我知道如何單獨做到這一點,但我怎樣才能將兩者結合起來,並且能夠檢測到我正在使用的是哪種操作系統? 我正在試圖做一個簡單的C文件 - 但它是編譯器的名稱更改。如何在Linux和Solaris中編譯C?
2
A
回答
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很難學,但是值得付出努力。檢測功能,而不是操作系統! –
相關問題
- 1. 的Linux VS的Solaris - 編譯軟件
- 2. 如何在基於Debian的linux中編譯和運行C/C++?
- 3. 在Linux中編譯C++
- 4. 在eclipse中編譯linux C++
- 5. 在Linux中編譯C++
- 6. 如何在使用cc的Solaris中編譯C++?
- 7. 如何在Linux中使用-wall和-werror並編譯c文件
- 8. 如何鏈接和編譯Linux中的.c和.so文件
- 9. C++編譯和運行在Linux上
- 10. 在Solaris上編譯LAPACK
- 11. Linux下C:編譯
- 12. 如何在C++中編譯編譯器?
- 13. 如何編譯多個.c和.h文件在GCC Linux呢?
- 14. 在windows和linux上編譯
- 15. 如何在linux中交叉編譯
- 16. 如何在Bochs的DLX linux中編譯C程序
- 17. 如何編譯c/cpp代碼,以便在linux中編譯後提供預處理彙編和對象文件?
- 18. Linux C++編譯錯誤
- 19. 如何編譯linux橋?
- 20. 在Solaris,Linux,Windows和Mac上清除C中的屏幕
- 21. 模塊化編程和編譯linux中的C程序
- 22. 代碼注入 - Solaris和Linux
- 23. 如何在C中編譯C程序?
- 24. 編譯C++代碼以在Windows和Linux中表現相同
- 25. 在Windows和Linux中寫入C會導致編譯問題嗎?
- 26. 如何在Linux中編譯和運行OpenNI的java文件
- 27. 如何在Linux中編譯apache,mysql和php
- 28. 如何在linux中編譯幾個java類和文本文件
- 29. 在Solaris上編譯ruby 1.9.3時出錯
- 30. 在Solaris上爲jython 2.5編譯Mysqldb
您確定需要嗎?你是否都在使用gcc? – Foon
@Foon我只知道要在Linux中編譯我做gcc或g ++,而在Solaris中我需要cc。或者我錯了嗎? – drum
在Linux上有一個'cc'(或者'c99',或者'c89',如果你是老式的),它就是連接到'gcc'的地方。默認的編譯器在每個平臺上通過內置在「make」中的默認規則正確選擇的可能性很大。 –