2012-03-12 28 views
0

我在Linux上有一個基本的基於makefile的項目。它也構建在Windows上的Visual Studio中。如何設置Makefile以使用Visual-Studio樣式的輸出目錄進行構建?

我想修改我的Linux makefile以創建具有不同二進制文件,調試和發佈的多個版本,但可能會添加其他版本。

如何設置Makefile項目以不同的方式建立源到不同的路徑?

例如,調試版本會是這樣的:

g++ -ggdb -Wall -DDEBUG 
.o files in ./Debug/obj 
.so and binary files in ./Debug/bin 

和釋放輸出將是:

g++ -Os -Wall 
.o files in ./Release/obj 
.so and binary files in ./Release/bin 

製作調試或使釋放將使得它們,或讓所有會做的一切。

我如何在Makefile中創建多個構建類型,但是我真的不清楚的部分是設置輸出目錄並設置哪個.o文件目錄來檢查源文件是否已經構建。

指向相關示例和文檔的指針將受到歡迎。

回答

1

做了一段時間的閱讀,頭部到Paul Smith's homepage,誰是GNU的維護者製作,並閱讀這兩篇文章:

然後你會可能理解建立除當前目錄以外的目錄不是一個好主意,因爲這意味着違背Make的粒度。

的文章也將指導您如何組織構建,它可能只適合特定的情形。

+0

謝謝,這是有用的,正是我所需要的。 – 2012-03-13 02:59:28

0

一種方法是讓您的項目支持配置機制(類似於Autoconf的./configure腳本),以便可以在源目錄以外的目錄中配置它。然後你可以用不同的方式配置和構建它。

另一種方法是使用lndir工具創建符號鏈接的構建樹。這將立即爲所有項目添加多重構建功能。這個想法是,你有一個鏡像目錄樹,通過符號鏈接填充原始樹中的原始文件。該程序的構建系統並不聰明(除非它像標準化路徑那樣做白癡的事情,刪除符號鏈接:Lisp構建系統ASDF的維護者,注意!)。它通過符號鏈接訪問文件,但在本地丟棄對象。好的是,源代碼目錄可以完整無缺,甚至只讀!而且你可以做得比make clean更好:只需吹掉lndir生成的鏈接庫即可達到完全原始狀態。

我用這樣的技巧爲幾種體系結構(所有軟件包:glibc,gcc,apache,你的名字)構建了一個Linux發行版。

它都是從相同的工作副本構建的;相同的解壓來源。

將此支持黑入該項目將是最後的手段。如果你喜歡GNU Make語言,那就去做吧。閱讀關於GNU Make的信息手冊,從頭到尾兩次或三次,然後離開你......我知道怎麼做,而且我也是這樣做的,但有什麼意義。這將需要空間來解釋,並不值得。

+0

的缺點符號鏈接樹的是,雖然你可以通過符號連接方便的編輯(如修復編譯通過錯誤瀏覽您的編輯器支持錯誤),如果你曾經加入一個文件,你要記住將其添加在原來的樹並刷新符號鏈接。這不是什麼大不了的事,但是在鞋小石頭能走幾英里之後變成一個大麻煩。 – Kaz 2012-03-12 22:20:27