常用 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 以后得多考虑适配一下多平台)。