2015-02-03 2 views
1

Что такое префикс @ - означает в make-файле? Любая разница от использования @ без -? Например, в следующем случае:что префикс @ - означает в make-файле?

ifndef NO_CBLAS 
    @echo Generating cblas.h in $(DESTDIR)$(OPENBLAS_INCLUDE_DIR) 
    @sed 's/common/openblas_config/g' cblas.h > $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/cblas.h 
endif 

ifndef NO_LAPACKE 
    @echo Copying LAPACKE header files to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) 
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke.h 
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_config.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_config.h 
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling_with_flags.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_mangling.h 
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_utils.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_utils.h 
endif 
ifndef NO_STATIC 
    @echo Copying the static library to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) 
    @install -pm644 $(LIBNAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) 
    @cd $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) ; \ 
    ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX) 
endif 
+0

Раздел 5 [Написание рецептов в правилах] (http://www.gnu.org/software/make/manual/make.html#Recipes) «GNU make Manual» содержит информацию обо всех этих вещах в этом. В частности, разделы 5.2 и 5.5. –

ответ

3

Раздел 5 Writing Recipes in Rules ПНЕ сделать Руководство содержит информацию о том, как эти вещи в нем. В частности, разделы 5.2 и 5.5.

5,2 Рецепт Повторяя

Обычно делают отпечатки каждой строки рецепта, прежде чем она будет выполнена. Мы называем это эхом, потому что он дает вид, что вы сами набираете строки.

Когда линия начинается с '@', эхо-сигнал этой линии подавляется. «@» Отбрасывается до передачи строки в оболочку. Обычно вы будете использовать это для команды, единственным результатом является то напечатать, например, как эхо команды для отслеживания прогресса через Makefile:

и

5.5 Ошибки в рецептах

После каждый вызов оболочки возвращается, make смотрит на его статус выхода. Если оболочка успешно завершена (статус выхода равен нулю), следующая строка в рецепте выполняется в новой оболочке; после завершения последней строки правило будет закончено.

Если произошла ошибка (статус выхода отличен от нуля), make отказывается от текущего правила и, возможно, от всех правил.

Иногда отказ определенной линии рецепта не указывает на проблему. Например, вы можете использовать команду mkdir, чтобы гарантировать, что каталог существует. Если каталог уже существует, mkdir сообщит об ошибке, но вы, вероятно, захотите, чтобы make продолжался независимо.

Чтобы игнорировать ошибки в строке рецепта, напишите '-' в начале текста строки (после начальной вкладки). «-» отбрасывается до того, как строка передается в оболочку для выполнения.

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