[問題] Makefile 如何產生計數的迴圈?

看板C_and_CPP (C/C++)作者 (饅頭)時間12年前 (2013/12/06 23:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
請教各位高手, 在 Makefile 如何產生計數(遞增或遞減)的迴圈? 基本上就是要 (例如給定0~63) 做到讓 Makefile 產生類似這樣的定義 CSRCS0 = $(addprefix ${TOP}/,${CFILES0}) CSRCS1 = $(addprefix ${TOP}/,${CFILES1}) CSRCS2 = $(addprefix ${TOP}/,${CFILES2}) . . . CSRCS62 = $(addprefix ${TOP}/,${CFILES62}) CSRCS63 = $(addprefix ${TOP}/,${CFILES63}) 當然事實上並不只是變數定義, 還包括用 ifneq 等等檢查變數是否存在之類的 會有很多地方使用到0~63的計數, 每個地方也不只一行 而且因為數字並不是固定的0~63, 所以我不能直接土法煉鋼真的像上面那樣展開來寫 目標是想做到類似像下面這樣子, 很簡潔, 也很容易修改這個數字: MAX = 63 define CSRCS_template = CSRCS$(1) = $$(addprefix $${TOP}/,$${CFILES$(1)}) endef $(for i=0..${MAX},$(eval $(call CSRCS_template,$(i)))) 註: 我知道 Makefile 沒有 for i=0..63 這種語法, 只是用來表達我想要做到的事情 一種做法是利用 script/shell 先產生出0~63的數列, 或是直接產生這64行定義 然後在 Makefile裡再 include 這個產生出來的檔案, 這樣是可以做到的 但我想知道, 有沒有辦法單靠 Makefile 語法技巧就可以做到這件事呢? (因為這個 Makefile 可能在不同平台上執行, 所以不希望靠額外的 script) 先謝謝各位了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.248.89

12/07 00:42, , 1F
12/07 00:42, 1F
感謝! 雖然裡面原提問者要的東西跟我不一樣(他要執行時期的, 而我要在Makefile裡面) 但是倒數第二個答案就是我要的! 基本上他讓我知道, 可以利用 $(call) 遞迴呼叫來達到可控制的迴圈, 然後用再利用 $(words) 來做數字的增減, 我覺得應該可以把他的答案再簡化一點, 等我完成了會再來報告 再次感謝! ※ 編輯: MetalChao 來自: 220.135.248.89 (12/07 22:42) 最後簡化成這樣 NUMBERS := define ITERATE $(if $(word ${1}, ${NUMBERS}),,\ $(eval NUMBERS+=$(words ${NUMBERS}))\ $(call ITERATE,${1})\ ) endef 如果用參數 5 來執行它 $(call ITERATE,5) 就會產生這個 0 到 4 的數列 NUMBERS 會變成 0 1 2 3 4 有了這樣的數列變數 就可以用 $(foreach num,${NUMBERS},...) 來做到任何數字迴圈了 ※ 編輯: MetalChao 來自: 210.80.67.18 (12/09 22:05)
文章代碼(AID): #1IeUlU7p (C_and_CPP)
文章代碼(AID): #1IeUlU7p (C_and_CPP)