Re: [問題] makefile的寫法問題
※ 引述《Zoxge (Zoxge)》之銘言:
: 標題: [問題] makefile的寫法問題
: 時間: Thu Aug 22 00:24:05 2013
:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Linux
:
: 問題(Question):
: makefile有個好處是可以自行判斷檔案有沒有被改過,沒改過就不必重編
:
: 但問題來了,當.cpp檔有幾百幾千個,又想要能自行判斷每個檔案是否被改過
: 這樣寫makefile不就xxx.o這樣的target也得要寫幾百幾千個 = =
: 請問有比較輕鬆的寫法嗎?
:
: 謝謝大家
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 123.195.197.207
: 推 Wush978:如: http://0rz.tw/z3GzQ 先例用wildcard建立所有目標 08/22 00:56
: → Wush978:然後下面利用 %.o : %.cpp ,搭配$<(對應到.cpp)和$@(.o) 08/22 00:57
: → Wush978:來撰寫compiling的指令即可。 08/22 00:57
a.o: a.c
b.o: b.c
可以用 pattern rule 來解決,
那
ab:a.o b.o
gcc -o $@ $^
這種的有無類似方法來處理?
後面 a.o b.o ... 要一值寫到 z.o 也是要寫不少。
和 .h 的相依性可以用 gcc -MM 來處理
ex:
process.c include 很多 .h
gcc -Iinclude/ -MM process.c
process.o: process.c include/process.h include/type.h include/protect.h \
include/k_string.h include/keyboard.h include/tty.h include/console.h \
include/console.h include/tty.h include/romfs.h include/syscall.h \
include/process.h include/vga.h include/k_assert.h include/k_stdio.h \
include/k_stdio.h include/k_string.h include/k_stdlib.h \
include/systask.h include/vfs.h include/storage.h include/storage.h
進階的作法把這些都合在一起:
%.d: %.c
set -e; rm -f $@ ; gcc -MM $(CFLAGS) $< > $@.$$$$ ; sed 's,\($*\)\.o[
:]*,\1.o $@ : ,g' < $@.$$$$ > $@ ; rm -f $@.$$$$
ref:
linux c 編程 一站式學習 p321: http://learn.akae.cn/media/ch22s04.html
: 推 johnjohnlin:cmake +1 08/22 01:14
: → vocaloid:gcc也可以幫你生dependency (-M) 08/22 01:25
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.239.46
→
08/22 08:40, , 1F
08/22 08:40, 1F
pcyu16: 可以舉個例子嗎?
推
08/22 09:01, , 2F
08/22 09:01, 2F
macro substitution? 也是不錯的方法。
1 files = main.aa stack.aa
2 sources = $(files:.aa=.c)
3
4 %.aa:%.zz
5 ls $@
6 main.zz:
7 ls /
8 clean:
9 echo $(files)
10 echo $(sources)
L2 把 main.aa 換成 main.c; stack.aa 換成 stack.c 很怪異的語法, 令我困惑。所以
sources 就是 main.c stack.c
突然發現, 這好像不符合版面 c/c++ 主題。
※ 編輯: descent 來自: 59.125.239.46 (08/22 09:28)
→
08/22 15:11, , 3F
08/22 15:11, 3F
→
08/22 15:12, , 4F
08/22 15:12, 4F
討論串 (同標題文章)