2009-10-19 65 views
0

我正在爲學校做一些C編程,我發現自己重複使用了我創建的庫,一遍又一遍(堆棧,用戶輸入,錯誤處理等)。組織學校工作區/編寫Makefile

現在,我個人的SVN目錄結構是這樣的:

trunk/ 
|-- 2520 
| `-- assignments 
|  |-- A2 
|   |-- Makefile 
|   |-- README 
|   |-- calculator.c 
|   |-- calculatorlib.c 
|   `-- calculatorlib.h 
`-- libs 
    |-- misc 
    | |-- errorlib.c 
    | |-- errorlib.h 
    | |-- userinputlib.c 
    | `-- userinputlib.h 
    `-- stacks 
     |-- stacklib.c 
     `-- stacklib.h 

有些文件(userinputlib和errorlib)的幾乎每一個項目,我的工作原因是顯而易見的習慣。我希望能夠將這些文件包含在項目的工作區(2520 /作業/ A2)中,而不必複製文件,因爲我不想管理文件的副本,也不想檢查兩份SVN中的同一個文件。
我想在項目工作區中有庫文件,這樣我的Makefile就可以工作,而無需進行大量的手動配置(或硬編碼路徑)。首先,我想到了符號鏈接(哪些SVN和tar支持),但我似乎無法編譯我的任務,因爲我的頭文件在另一個目錄中。

我可以手動將每個頭文件編譯爲一個目標文件並進行最終的鏈接,但我不知道如何在Makefile中自動執行此操作。

任何幫助或任何替代我如何我的環境設置表示讚賞。

謝謝!

編輯:我忘了提,我已經搜索谷歌和發現描述自動依存產生(或許,我想這一點?)使用gcc -MM了幾頁,我已經閱讀過GNU Make使用手冊,但沒有跳出以我。

回答

3

使用可以使用Subversion的externals功能將libs樹的動態副本鏈接爲項目的子目錄。

但最後最好只使用一個副本(一個顛覆副本,所以它實際上是庫代碼的一個分支),這樣你就不必擔心對庫的影響現有項目,並可根據需要合併更改。

+0

這正是我試圖與我的答案溝通,但我認爲你更清楚一點。 – timdev 2009-10-19 00:47:10

1

爲什麼你不想(svn)將必要的庫文件複製到你的項目中?您將基本上創建您的lib的一個分支用於您的項目。如果最終發現庫代碼中存在一個錯誤,則可以將其修復並提交回(複製)。一旦你完成了,你可以將你的修復合併回圖書館的中繼位置。