2015-08-04 3 views
0

У меня есть два вопроса: 1) Во-первых: В косметическим файл я создаю файл и устанавливая его разрешения, но я предполагаю, что CHMOD не удается каким-то образомошибка Makefile - если еще

72  chmod -R 777 $(DEL_LIB_PATH) 
73  ifeq ($?,1) 
74   echo "chmod failed" 
75  endif 

На запуска сделать файл становится ниже ошибки:

ifeq ($?,1) 
ANOMALY: sh: syntax error at line 1 : `(' unexpected 
ANOMALY: *** Error exit code 2 

2) во-вторых: Моя сборка займет 1 час и после этого только ошибки приходит из-за ошибки в сделать файл, есть ли способ/инструменты, чтобы проверить, если сделать файл нормально или нет ? без запуска сборки

ответ

0

Самый фундаментальный аспект написания make-файлов для понимания - это разница между синтаксисом make-файла и синтаксисом рецепта. Makefiles - это действительно два совершенно разных языка, объединенные в один файл.

Все «нормальные» части файла makefile находятся в синтаксисе makefile, описанном в руководстве по установке. Тем не менее, рецепты (строки, отступаемые символами TAB после определения цели) не являются синтаксисом makefile, они написаны в скрипте POSIX sh (shell): программа make примет текст с отступом по символам TAB, заменит переменную/функцию ссылки (вещи начинались с одного $), затем передают всю вещь в оболочку, которую нужно обработать, и ждать результата (код выхода). Только синтаксический анализ рецепта сделанный make для ссылок на переменные/функции. Ничего больше.

So. В приведенном выше примере вы пытаетесь использовать makefile таких конструкций, как ifeq внутри рецепта, для которого требуется shell. Вы не можете этого сделать, и поэтому вы получаете синтаксические ошибки, из оболочки (хотя ваша среда оболочки странная ... Я никогда не видел ни одной печати ANOMALY:, как раньше).

Вы должны использовать раковина конструкции в рецепте; что-то вроде:

 chmod -R 777 $(DEL_LIB_PATH) ; \ 
     if [ $$? -eq 1 ]; then \ 
      echo "chmod failed"; \ 
     fi 

Или, более кратко:

 chmod -R 777 $(DEL_LIB_PATH) || echo "chmod failed" 

Однако, это может быть плохой идеей, потому что, делая это, вы прячетесь ошибку от марки. Код выхода вашего рецепта теперь всегда успешный, даже если что-то не удается. Возможно, это то, чего вы хотите, но, возможно, нет. При работе с рецептами вы всегда должны тщательно думать о том, как рецепт может потерпеть неудачу, и убедитесь, что если вы хотите его заметить, вы выходите с кодом ошибки, отличным от 0.

Я действительно не знаю, почему вы хотите в любом случае повторить сообщение здесь. Если chmod не удается, то будет печатать свои собственные ошибки, о том, почему это не удалось: почему не только пусть те сообщения будет достаточно, и просто использовать:

 chmod -R 777 $(DEL_LIB_PATH) 

как ваш рецепт?