Makefile: Проверьте разрешение на запись в каталог - PullRequest
3 голосов
/ 02 марта 2012

Есть ли способ, в правиле Makefile, проверить, есть ли у него разрешение на запись в указанный каталог? Это небольшая часть Makefile, который я пишу:

APP_NAME = electro
CC = gcc
C_FLAGS = -Wall
LIB_DIR = lib
SRC_DIR = src
INST_DIR = /usr/bin
INST_LIBDIR = /usr/lib
LIBS = libcomponent.so libpower.so libresistance.so
L_FLAGS = -lresistance -lpower -lcomponent

.PHONY: lib

lib:
    @$(MAKE) --directory=$(LIB_DIR)

install:    $(SRC_DIR)/main.c lib
    (cd $(LIB_DIR); cp $(LIBS) $(INST_LIBDIR))
    $(CC) $(C_FLAGS) -o $(INST_DIR)/$(APP_NAME) $(L_FLAGS) $< 
    @echo "$(APP_NAME) installed successfully."

Правило 'install', очевидно, не будет выполнено, если у пользователя нет прав на запись в / usr / lib и / usr / bin. Есть ли способ проверить это разрешение перед выполнением этих двух строк и в этом случае вывести соответствующее сообщение об ошибке (возможно, что-то вроде «У вас недостаточно прав для запуска этой команды»)?

Ответы [ 2 ]

5 голосов
/ 02 марта 2012

Shell / bin / test или / bin / [позволят вам /bin/test -d /path/to/foo -a -w /path/to/foo, даже если make сам по себе не работает.

Альтернативный способ сделать каталог доступным - попытаться создать его с помощью mkdir -p, прежде чем проверять, доступен ли он для записи. Мне известно, что я делал следующее:

mkdir -p ${TARGETDIR} && test -w ${TARGETDIR}

Если первая команда не выполнена, вторая не пробуется. Если каталог уже существует, mkdir -p будет успешным.

0 голосов
/ 02 марта 2012

Вы делаете такие вещи более или менее, вставляя небольшие кусочки сценариев оболочки в ваш make-файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...