把object放到同一個目錄的Makefile寫法,目標檔案同一目錄
【原文:http://m.blog.csdn.net/blog/lanmanck/8462088】
相信很多同學都在思考這個問題:
Makefile裡面怎麼把object檔案放到一個指定目錄,而不是跟c檔案在一起?
今天來分享下這個makefile的寫法:
情形1:Makefile與原始碼在同一個目錄或者位於父目錄下,我們要把中間檔案放到obj目錄,例如:
src
--src2
inc
obj
Makefile
則makefile內容可以為:
source = $(wildcard *.c) $(wildcard src2/*.c)
objs = $(source:%.c=%.o)
all: $(objs)
gcc -o $@ $^
@echo done
$(objs): %.o : %.c
gcc -c $< -o $@
這是個通用的makefile,object檔案仍然與C檔案放在一起,我們改一下:
OBJDIR = obj
vpath %.c src2
source = $(wildcard *.c) $(notdir $(wildcard src2/*.c))
objs = $(source:%.c=$(OBJDIR)/%.o)
all: $(objs)
gcc -o $@ $^
@echo done
$(objs): $(OBJDIR)/%.o : %.c
@mkdir -p $(OBJDIR)
gcc -c $< -o $@
不同的是,加了一個vpath,意思是告訴makefile去src2再找c檔案。
這種情況下還好,因為如果要在obj建立跟之前c檔案對應目錄的話,很好建,例如obj/src2/xxx.o,還有種情況可能就不行了:
情形2:Makefile與原始碼在同一個目錄,但要呼叫同目錄的C檔案,例如:
common
project
-src
--src2
-inc
-obj
-Makefile
則makefile內容可以為:
OBJDIR = obj
vpath %.c src2
source = $(wildcard *.c) $(notdir $(wildcard src2/*.c)) $(notdir $(wildcard ../common/*.c))
objs = $(source:%.c=$(OBJDIR)/%.o)
all: $(objs)
gcc -o $@ $^
@echo done
$(objs): $(OBJDIR)/%.o : %.c
@mkdir -p $(OBJDIR)
gcc -c $< -o $@
這種情況下object仍然是放到同一個目錄的,但如果要在obj目錄建立相應的資料夾就不行了,例如:obj/../common/xxx.o,檔案系統報錯,因為../不是一個有效的目錄名稱。
如何在obj目錄建立obj/common/xxx.o呢?請各位思考下 :-)
相關文章
- opencv-python 讀取同一目錄的多個檔案OpenCVPython
- 批量修改同一目錄下檔名--操作so easy
- windows 把指定目錄的檔案複製到當前目錄Windows
- 檔案、目錄防寫(轉)
- 無法建立目錄或檔案 無法建立目錄的解決辦法
- Linux多使用者共同使用同一目錄Linux
- 把當前目錄檔名輸出到一個檔案
- ORACLE directory 目錄讀寫檔案Oracle
- 複製目錄下的全部檔案到另一個目錄
- rsync同步時,刪除目標目錄比源目錄多餘檔案的方法(--delete)delete
- 沒有目錄建目錄,沒有檔案建檔案
- 刪除檔案或目錄提示"檔案或目錄無法刪除"的解決方法!
- 列出並排序檔案系統根目錄(/)下各個目錄的大小排序
- 兩個目錄中,刪除其中一個目錄中同名檔案的做法
- 8.var目錄下的檔案和目錄詳解
- 刪除目錄及目錄下所有檔案與子目錄 (轉)
- 目錄與檔案屬性:編寫ls
- 18、檔案與目錄
- 清理bdump目錄檔案
- 帝國cms把文章內容都存放到根目錄方法
- 目錄結構檢視及目錄下各個檔案的大小的統計
- gitignore 忽略目錄下檔案僅保留目錄形態Git
- IIS虛擬目錄掛載檔案伺服器目錄伺服器
- 目錄檔案有寫許可權 危險
- php在網站根目錄下寫檔案PHP網站
- Python 檔案、目錄操作Python
- Linux 檔案與目錄Linux
- 列出目錄/檔案命令ls
- Linux — 檔案、目錄管理Linux
- 歸檔目錄滿或刪除,把歸檔日誌自動轉移到另一個目錄的設定方法
- Object-C,遍歷目錄Object
- 【目錄】JVM目錄JVM
- 現在我要寫一個定時程式定時讀取該目錄下的所有txt檔案到資料庫,並把這些txt檔案轉移到另外一個目錄資料庫
- makefile有關問題,想像vs一樣將目標檔案,輸出檔案存放在指定資料夾,而不是在原始檔的目錄
- 隱藏任意程式,目錄檔案,登錄檔,埠
- 遍歷目錄下的所有檔案
- Linux 檔案系統的目錄Linux
- 注意放在/tmp目錄下的檔案