[問題] 有關於 Makefile

看板C_and_CPP (C/C++)作者 (西力: blueworld15@hotma)時間15年前 (2011/06/01 15:42), 編輯推噓2(2025)
留言27則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我現在在建立一個zigbee無線網路拓樸 而sample code裡他的每一個node的address是定義在makefile裡面的 重點是我現在要用coodinator去算出一個address傳送給router 所以等於是說要把makefile裡原本定義的address改掉, 我想請問的是 makefile裡的變數,可以從程式裡面去做處理嗎? 程式碼(Code):(請善用置底文網頁, 記得排版) 以下是makefile的內容: MAKEARG = -s --no-print-directory -C ../Build COORD_ID = 0 ←address定義在這裡 COORD= -f ../Build/coord.mk COORD_ID=$(COORD_ID) DEV= -f ../Build/dev.mk COORD_ID=$(COORD_ID) all: @${MAKE} $(MAKEARG) $(COORD) MY_ADDR=$(COORD_ID) @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=1 ←address定義在這裡 # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=2 # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=3 # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=4 clean: @${MAKE} $(MAKEARG) $(COORD) MY_ADDR=$(COORD_ID) clean @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=1 clean # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=2 clean # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=3 clean # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=4 clean objclean: @${MAKE} $(MAKEARG) $(COORD) MY_ADDR=$(COORD_ID) objclean @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=1 objclean # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=2 objclean # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=3 objclean # @${MAKE} $(MAKEARG) $(DEV) MY_ADDR=4 objclean -- ▁▁ ▕力西▏ ▕西力▏  ̄ ̄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.144.198

06/01 15:52, , 1F
不太懂需求,可以再清楚點嘛?意思是address變數會一直更
06/01 15:52, 1F

06/01 15:53, , 2F
動?如果是這樣的話,把address那邊宣告為變數,就不用手動
06/01 15:53, 2F

06/01 15:54, , 3F
改,至於makefile有無類似argv的功能,我就不清楚
06/01 15:54, 3F

06/01 15:58, , 4F
應該是說address只會改變一次而已,要怎麼在makefile裡宣告
06/01 15:58, 4F

06/01 15:58, , 5F
成變數@@
06/01 15:58, 5F

06/01 16:13, , 6F
其實大致了解你的問題,VAL = 1 ==> MY_ADDR=${VAL}
06/01 16:13, 6F

06/01 16:14, , 7F
只是你提到address只會改變一次,這點我一直困惑.
06/01 16:14, 7F

06/01 16:14, , 8F
可能其他人比較清楚吧
06/01 16:14, 8F

06/01 16:28, , 9F
感謝你 話說照你那樣宣告之後 make會出現empty variable name
06/01 16:28, 9F

06/01 16:28, , 10F
請問那行是要加在哪裡@@
06/01 16:28, 10F

06/01 16:46, , 11F
你把你宣告的地方加進這邊,讓我看看,因為我的沒出錯.
06/01 16:46, 11F

06/01 16:50, , 12F
我是習慣加在all前面.以c的術語來講,她們都是globel
06/01 16:50, 12F

06/01 16:51, , 13F
加到哪,應該都不會出現這個吧
06/01 16:51, 13F

06/01 17:39, , 14F
上面那個我知道了XD 不過其實我的意思是 我可以在程式面
06/01 17:39, 14F

06/01 17:39, , 15F
做出 MY_ADDR = 某個變數 這種assign嗎?
06/01 17:39, 15F

06/01 18:21, , 16F
ex: ./a.out file.in 140.138.56.120 這樣嗎?
06/01 18:21, 16F

06/01 18:28, , 17F
可能我愚鈍吧,真的不清楚你的需求.因為你出現矛盾
06/01 18:28, 17F

06/01 18:55, , 18F
既然你開始compile,已經可以接收MY_ADDR參數
06/01 18:55, 18F

06/01 18:56, , 19F
那麼變成執行檔時,應該也可以
06/01 18:56, 19F

06/01 19:26, , 20F
其實我的需求就是希望可以在code裏面取用這個變數@@
06/01 19:26, 20F

06/01 20:48, , 21F
我不知道gcc build時,能不能把定義給code讀.
06/01 20:48, 21F

06/01 20:49, , 22F
但是可以在makefile過程中產生一個設定檔, 然後叫code
06/01 20:49, 22F

06/01 20:49, , 23F
來讀取這個設定檔
06/01 20:49, 23F

06/01 20:52, , 24F
不知道能不能 用define的方法配合##把字串弄出來
06/01 20:52, 24F

06/01 20:56, , 25F
你需要的應該是gcc的-Dmacro[=defn]這個參數吧?
06/01 20:56, 25F

06/01 20:56, , 26F
像是 gcc test.c -DMY_ADDR=1
06/01 20:56, 26F

06/01 21:49, , 27F
可以從軟體端來做好說 但協定會變複雜QQ
06/01 21:49, 27F
文章代碼(AID): #1DvUrkcF (C_and_CPP)
文章代碼(AID): #1DvUrkcF (C_and_CPP)