Você não precisa escrever nenhum Makefiles especial para determinar o número de núcleos; os flags padrão podem ser especificados no ambiente e o Linux coreutils vem com uma ferramenta chamada nproc
:
export MAKEFLAGS="-j$(nproc)"
Se nproc
não existe em seu sistema, uma alternativa (também apenas para Linux) é getconf
:
export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)"
A proteção parcial contra congelamentos completos pode ser feita executando make
(juntamente com todo o processo de compilação) com baixa prioridade de CPU e IO:
alias make="nice ionice make"
Note, no entanto, que isso irá desacelerar a compilação se outros processos estiverem usando o disco IO ou a CPU strongmente ao mesmo tempo.
Você também pode escrever um script de wrapper (ou uma função de shell) que verifique todos os argumentos dados a ele:
make() {
local arg
for arg; do
[[ $arg == -j* ]] && {
echo "Rejecting '$arg' in make args. Use 'command make ...' to bypass."
return 1
}
done
command make "$@"
}