我有一个简单的 make 文件,它使用 /opt/homebrew/opt/llvm/bin/clang 编译一堆 c 文件。我有两台机器(Intel Mac 和 Apple M1 Max)都运行 macOS 12.7.3。
在 Intel Mac 上:make 和“make -j8”都可以按预期毫无问题地编译所有文件。
在 Apple M1 Max 上:当我在没有任何标志的情况下运行 make 时,它会毫无问题地编译所有文件。但是,如果运行 “make -j8”,我得到: make:/opt/homebrew/opt/llvm/bin/clang:权限被拒绝。如果我运行 "sudo make -j8",那么我不会被拒绝。
为什么在 Apple M1 Max 上运行 make 会导致权限被拒绝,而在 Intel Mac 上却不会,即使两者都运行 macOS 12.7.3 并且都使用相同版本的 clang (17.0.6)?
我尝试更改 /opt/homebrew/opt/llvm/bin/clang 的所有者和权限。我尝试了许多不同的 make 文件(都有相同的问题)。我尝试更改线程数。 “-j1”有效,但“-j2”及更高版本失败。我原以为在 Apple M1 Max 上使用 -j8 会简单地使用多个线程来更快地编译所有文件。 Apple M1 Max 芯片中是否存在某些安全功能,可以阻止用户在终端中运行多线程作业?我的帐户具有管理员权限。
编者注:我已将其从问题移至答案,并将答案标记为社区所有。 OP,如果您想将此作为您自己的答案发布,请发表评论并要求我删除此内容,这样它就不会用您自己的答案来完成。
使用
gmake
可能需要首先从 Homebrew 等安装它。
在两个系统上:
zsh% type -a make
make is /usr/bin/make
zsh% make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
当我切换到
gmake
时,两台机器上的一切都工作正常。所以罪魁祸首就是苹果古老的make
。感谢 John Bollinger 和 MadScientist 为我指明了正确的方向!