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 информацией, он правильно распечатал вызов функции, но каждый раз, когда я пытаюсь на самом деле обрисовать форматтер, он дает мне ошибку в заголовке ,
Редактировать: Этот вопрос страдал от ошибок синтаксиса всюду, но, следуя советам @MadScientist, я в конечном итоге смог заставить его работать с использованием циклов оболочки.
Что такое 'ALL_S_SOURCES'? Что еще в этом make-файле? Какая версия make? С этим точным фрагментом я не делаю этой ошибки с несколькими разными версиями make. (Как в стороне, что такое '$ [Base, $ (1)]. Tmp' должен был делать в этой строке рецепта для вас?) –
И если я заполню' ALL_S_SOURCES' с именем файла (который существует), я получаю ошибка отсутствия разделителя. Этот параметр выглядит так, будто он хочет выводить строки рецептов, но '$ (eval)' не генерирует никакого вывода. Также присваивание определения с помощью:: = вызывает его сразу ** **, что означает, что все ваши '$ 1' ссылки будут пустыми. Короче говоря, это даже не близко к тому, чтобы работать как есть. –
Даже если я заменил весь define одним выражением echo, я все равно не могу его эхо один раз для каждого файла в списке. – Dakota