2011-07-11 55 views
0

使源我的makefile,編譯子文件夾中的所有的* .c文件:在子文件夾的問題

objects := $(patsubst %.c,%.o,$(wildcard *.c)) 
cobj: $(objects) 
$(objects): %.o: %.c 
    $(CC) -c $< -o [email protected] 

我有麻煩試圖做從父文件夾相同。比方說,我的.c文件所在的文件夾「中國證監會」

objects := $(addprefix, csrc/, $(patsubst %.c,%.o,$(wildcard *.c))) 
cobj: $(objects) 
$(objects): csrc/%.o: %.c 
    $(CC) -c $< -o [email protected] 

我總是看到「沒有爲cobj做...任何想法?

+1

你想'foo.o'進入父目錄或'csrc /'嗎? – Beta

+0

留在csrc /中,可能不是那麼重要....謝謝 – user270398

回答

2

你的方式規則csrc/%.o: %.c轉化例如csrc/foo.ofoo.c,不csrc/foo.c。據推測,這是不是你想要的。

爲什麼不%.o: %.c

1

什麼奧利查爾斯沃思說的是正確的,但還有另一個錯誤。該wildcar d函數只檢查當前目錄。現在,$(objects)將爲空(我假設當前父目錄中沒有源文件)。你將不得不指定路徑:$(wildcard csrc/*.c)

+0

$(通配符csrc/*。c) - 這就是票。謝謝。 – user270398

+0

任何想法與'通配符'和文件夾名稱中的空格是什麼? $(通配符csrc/*。c)可以工作,但$(通配符csrc 1.0/*。c)不能。 $(通配符csrc \ 1.0/*。c)或$(通配符「csrc 1.0」/ *。c)或其他常用技巧包含文件夾名稱中的空格...... – user270398

+0

@ user270398:通常,將解釋一個空格作爲分隔符,所以在這種情況下,通配符函數將這看作是兩個獨立模式'csrc'和'1.0/*。c',它們試圖單獨匹配,每個模式顯然都沒有返回任何匹配。我可能已經猜出逃脫的空間是可能的,但顯然不是。文件夾和文件名中的空格是一個壞主意的原因之一。 – eriktous