杂说1 —— make、Makefile
对于小项目来说,使用make(借个词“自动化”)足够了
只要用到最基本的规则就够了,配合一点通配和内置函数使使用更灵活

make -j 问题
make -jN 可以多线程编译,比其它系统慢就慢吧,小项目也就十几秒几十秒的时间,又何必在意。
上面的写法,使用make -jN会有个提示
make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
搜索到https://qa.1r1g.com/sf/ask/4249190851/,底下的回答说明了
(看着应该是机翻)
GNU make 手册对这个错误有很好的解释。关键是:'make' 不会将有关 jobserver 的信息传递给被调用的进程,除非确定被调用的进程也是 'make'。
'警告:作业服务器不可用:使用 -j1。将“+”添加到父生成规则。
为了使进程进行通信,父进程将信息传递给子进程。因为如果子进程实际上不是一个 make,这可能会导致问题,所以父进程只有在它认为子进程是一个 make 时才会这样做。父级使用普通算法来确定这一点(请参阅MAKE 变量的工作原理)。如果 makefile 的构造使得父进程不知道子进程是一个 make 进程,那么子进程将只收到部分必要的信息。在这种情况下,子进程将生成此警告消息并按顺序进行构建。
错误描述中引用的 MAKE 变量如何工作部分指定了两种告诉 'make' 调用的进程是 'make' 的另一个实例的方法:使用$(MAKE)
或+
。它指出:
$(MAKE)
在配方中调用“make”时应该使用变量。递归 make 命令应始终使用变量 MAKE,而不是显式命令名称“make”,如下所示:
subsystem: cd subdir && $(MAKE)
在配方中调用“make”的行之前使用
$(MAKE)
和放置 a+
具有相同的效果。使用 MAKE 变量与在配方行的开头使用“+”字符具有相同的效果。
只有当您明确输入
MAKE
配方时,魔法才会发生。如果不是这种情况,请使用+
.仅当 MAKE 变量直接出现在配方中时才启用此特殊功能:如果 MAKE 变量是通过扩展另一个变量引用的,则它不适用。在后一种情况下,您必须使用“+”标记来获得这些特殊效果。
所以要改一改自己的习惯了,编写时使用$(MAKE)替代make