多目錄的makefile

  都已經21世紀了,怎麼說程序也不能就一個文件不是,呵呵,鬱悶幾天,現在終於把這個問題解決了.

  問題描述:現有2個.cpp文件,1個.h文件 分別放在lib和sources文件夾下,頂層makefile如何解決.o所需依賴的文件之間的編譯問題?

  解決方案:

    看了很多帖子,發現使用了.d,然後再include進來就可以了,不過我試了,好像不怎麼好用,鬱悶啊...畢竟是人家的風格,可能我還沒讀懂,呵呵,爲了找到一個我認爲最簡便,最適合自己的方案,於是我放棄了這種高級模式,迴歸到原始的方法中(表鄙視偶啊,黑貓白貓,抓到老鼠纔是好貓啊 ^_^).

    仔細查找編譯器參數,發現一個"-I"參數很好用,可以指定文件的查找目錄.不過文章裏都提到VPATH變量和vpath命令,我怎麼設置都只能找到.c/.cpp文件,就是找不到.h文件,鬱悶啊!! = =||(經過實驗測試表明vpath/VPAHT只對目標和依賴進行檢查,實際語句需要絕對或相對路徑才行,問題解決),不知道是不是make瞎了眼,那麼明擺着的目錄就是看不到,況且我還告訴它了...崩潰,還是回到剛纔提到的-I參數上,只要在命令語句上添加上"-I [directory]",如果有多個需要查找的目錄就繼續添加"-I"參數就行了,我怎麼看這個都比其他的容易....也不排除過幾天就發現原來.d纔是最好的....當然實踐出真知啊,先慢慢用着,過一段時間就知道啦.

    歷時1個小時的實驗...終於把.d弄得差不多了,而且也終於實現了我的目的,多目錄編譯連接.OK,來看看成果吧:

    

    這裏我解釋下,我有4個目錄,剛纔新加了2個...分別是

    lib--存放頭文件

    sources--存放源文件

    objs--存放.o

    include--存放.d文件

    這裏爲了可以使用.d方便的形成依賴關係,所以我們要先高清一個次序,.o依賴.c/.cpp和.d,.d依賴.c/.cpp,所以make檢查到這些時,會第一個創建.d文件,這裏根據指定的搜索目錄進行查找,如果找到那麼執行相應創建命令,值得注意的是這裏我指定了LIB路徑,要不這傻傻編譯器又找不到頭文件了,呵呵,.d生成完了,找到其對應的上一條依賴關係中的.c/.cpp然後生成相應的.o文件,所以我們看到的結果跟這個執行過程相同.然後這些文件也相應的輸出到相應目錄中去,方便管理,看着也好看啊.

    然後到了鏈接步驟了,這裏因爲所有的.o也被放在了相應的目錄下,所以底層目錄下是沒有需要文件的,那麼又需要我們來告訴這個傻傻的編譯器去哪裏找了,這裏用到一個函數addprefix,可以對變量中的項目逐個的添加前綴,這樣添加了目錄,就可以鏈接程序了,SO...一個多目錄的makefile 製作完成!哈哈,是不是特有成就感那,起碼我是這麼認爲.剩下的就是進入項目中更多的訓練了,嵌套make也是必須掌握的...好了今天有點太晚了,困鳥啊....洗洗睡了

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章