常用 linux 的小伙伴可能经常写脚本或者 makefile 会使用 install
命令,在各种脚本或编译配置中出现 install -Dm755 file1 file2
这种脚本执行,但由于 macos 的 install 命令参数不同所以导致这种写法会直接报错 install: illegal option -- D
,那就咱们卑微的 macos users 只能自适应了。
我本来想的是直接改 makefile 自己实现类似 install 的操作(代码如下),后面我看了一下 macos 的 install 命令其实改一下参数(其实 macos 中 install 有一个 -d 的参数看文档说是如果没有父目录就创建,但是我添加这个参数执行 “环境 macos 14.7.1” 会报错 install: file1 exists but is not a directory)就可以了用不着自己使用 cp 和 chmod 定义
PLATFORM := $(shell uname -s)
# define install cmd for Darwin
define install
@if [ "$(PLATFORM)" = "Darwin" ]; then \
mkdir -p $(shell dirname "$(3)") && cp -r "$(2)" "$(3)" && chmod -R "$(1)" "$(3)"; \
else \
install -Dm$(1) "$(2)" "$(3)"; \
fi
endef
core/rclone.exe: rclone/rclone.exe
$(call install,755,tmp/v1.0/rclone.exe,$@)
# install -Dm755 "tmp/v1.0/rclone.exe" "$@"
秉持着不影响原来的调用,扩展其适应 macos 编译最终我添加了如下定义
PLATFORM := $(shell uname -s)
# define install cmd for Darwin
define install
@if [ "$(PLATFORM)" = "Darwin" ]; then \
install -m$(1) "$(2)" "$(3)"; \
else \
install -Dm$(1) "$(2)" "$(3)"; \
fi
endef
core/rclone.exe: rclone/rclone.exe
$(call install,755,tmp/v1.0/rclone.exe,$@)
# install -Dm755 "tmp/v1.0/rclone.exe" "$@"
make build 一把唆,嗯现在舒服了(如果自己写 makefile 以后得多考虑适配一下多平台)。