CFormat:
define Format_File :=
@echo Formatting
ifneq ("$(wildcard $(1))","")
@echo if1
# The default extensions for intermediate files are not used,
# to avoid collisions with backup files open in the editor, etc.
# Save the original source file with an '_X' suffix on the extension.
ifneq("$(wildcard $(1)_X)","")
@echo if2
else
@echo else2
endif
@ren $(1) $(1)_X
# C-Comment is invoked separately, due to pathing limitations
# The redirection is a means to suppress blabbering.
@echo Formatting $(1) . . .
$(CFORMAT_PATH)\Cformat -h$(CFORMAT_PATH) $(1)_X -o$[Base, $(1)].tmp -ino >temp.tmp;
$(CFORMAT_PATH)\Ccomment -h$(CFORMAT_PATH) $[Base, $(1)].tmp -o$(1) >temp.tmp;
else
@echo else1
endif
endef
FormatAll: CFormat
$(foreach loopFile,$(ALL_S_SOURCES),$(eval $(call Format_File,$(loopFile))))
.PHONY: FormatAll
當我更換EVAL與信息它打印出來的函數調用正常,但每次我試圖真正EVAL它給我的錯誤在標題格式化之前開始。
編輯:這個問題到處都是語法錯誤,但遵循@MadScientist的建議,我最終能夠使用shell循環來工作。
什麼是'ALL_S_SOURCES'?那個makefile還有什麼?什麼版本的make?有了這個確切的代碼片段,我並沒有發現幾個不同版本的make的錯誤。 (作爲旁邊是什麼'$ [Base,$(1)] .tmp'應該在你的配方行中執行?) –
實際上,如果我使用文件名(存在)填寫'ALL_S_SOURCES',缺少分隔符錯誤。該定義看起來像它想要輸出配方行,但'$(eval)'不會產生任何輸出。同樣用':='賦值的定義會立即對它進行求值,**這意味着所有'$ 1'引用都將是空的。總之,這甚至不能按原樣工作。 –
即使我用一個echo語句替換整個定義,我仍然不能讓它爲列表中的每個文件回顯一次。 – Dakota