2015-02-09 2 views
1

Я пытался получить результат функции файла в Makefile для моего демо с небольшой Makefile, как:Makefile функции файл демо ошибки

CMD = cat 

OBJECTS = Makefile Makefile-filter-func 

program : $(OBJECTS) 
     $(file >[email protected]) $(foreach O,$^,$(file >>[email protected],$O)) 
     @echo The file has been created. 
all : 
     $(CMD) $(CMDFLAGS) @[email protected] 
     @echo The file contents are printed. 
     @rm [email protected] 
     @echo The file removed. 

Я хочу, чтобы посмотреть файл, имя файла с помощью команды Ls, но это makefile имеет следующую ошибку:

Makefile-file-func:7: *** recipe commences before first target. Stop. 

где я ошибаюсь.

ответ

1

Указатель на ответ можно найти в исходном коде make (версия 3,82), в файле read.c:

989  /* This line starts with a tab but was not caught above because there 
990   was no preceding target, and the line might have been usable as a 
991   variable definition. But now we know it is definitely lossage. */ 
992  if (line[0] == cmd_prefix) 
993  O (fatal, fstart, _("recipe commences before first target")); 

С этой информацией, можно воспроизвести проблему, вставляя пробелы в в правом месте. В приведенном ниже коде, ~ обозначает пространство и <TAB> обозначает TAB:

program : $(OBJECTS) 
~~~~~~~~$(file >[email protected]) $(foreach O,$^,$(file >>[email protected],$O)) 
<TAB> @echo The file has been created. 

Поскольку пространства и вкладки заблудиться в вашем вопросе, это немного трудно понять, если это именно ваш случай, а также, хотя.

Обратите внимание, что рецепты обычно начинаются с TAB.

+0

Большое спасибо @ReinierTorenbeek за ответ. Он решает мою проблему и помог мне понять рецепт из исходного кода, предоставленного вами ссылкой. –

+0

Рад, что это помогло, вкладки/пробелы всегда раздражают 'make'. –

+0

Да, сэр !!! Еще раз спасибо @ReinierTorenbeek –

Смежные вопросы