Makefile:检查目录的写入权限

yzf*_*fr1 3 linux permissions makefile

有没有办法在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."
Run Code Online (Sandbox Code Playgroud)

如果用户没有写入/ usr/lib和/ usr/bin的权限,则"安装"规则显然会失败.有没有办法在执行这两行之前检查此权限,并在这种情况下输出相应的错误消息(可能是"您没有足够的权限来运行此命令")?

Gra*_*ham 5

Shell的/ bin/test或/ bin/[会让你/bin/test -d /path/to/foo -a -w /path/to/foo,即使make本身不是.

使目录可访问的另一种方法是mkdir -p在测试它是否可写之前尝试创建它.我知道要做以下事情:

mkdir -p ${TARGETDIR} && test -w ${TARGETDIR}
Run Code Online (Sandbox Code Playgroud)

如果第一个命令失败,则不尝试第二个命令.如果目录已存在,mkdir -p则会成功.

  • 不要低估`mkdir -p`的价值.例如,如果您的文档需要安装在`$ {PREFIX}/share/$ {PKGNAME}/html /`中,那么运行单个`mkdir -p`会更容易,而不是测试并创建每个部分.路径.如果你真正的目标是"尽可能写入$ {PATH}",这是一种更快捷的方法. (2认同)