Makefile

$()${}

除了 $ 之外,$()${} 都是 make 替换变量的语法。但是 ${} 还能被某些 shell(比如 bash)继续替换。

此外,它们也能调用 make 提供的命令,比如字符串替换、过滤和调用 shell。

Shell 函数无法正常传递 * 参数

是因为 make 传参的时候将引号去掉了,导致星号又被 shell 解释了一次(我用的 MSYS2)。

$ cat Makefile
all:
        echo \'*\'
$ make
echo \'*\'
'*'
$ nvim Makefile
$ cat Makefile
all:
        echo '*'
$ make
echo '*'
Makefile

兼容性

  • 使用 ./ 来表示路径,不要使用 .\。(但是这样 cmd 解释不了,得用 bash 才行)
  • 使用命令名来调用,不要使用 .exe 后缀。

这是一种处理兼容性的方式:

/=/
ifeq ($(OS),Windows_NT)
    /=\\
endif

all:
    echo "C:$/Users$/userA$/Downloads"