有没有办法在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."
如果用户没有写入/ usr / lib和/ usr / bin的权限,“安装”规则显然会失败。有没有办法在执行这两行之前检查此权限,并在这种情况下输出相应的错误消息(可能是“您没有足够的权限来运行此命令”这一行?)
答案 0 :(得分: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}
如果第一个命令失败,则不尝试第二个命令。如果目录已存在,mkdir -p
将成功。
答案 1 :(得分:0)
通过将少量shell脚本嵌入到makefile中,你或多或少地做了类似的事情。