欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

makefile语法问题汇总

程序员文章站 2022-07-12 11:28:25
...
BUILD_DIR ?= build

$(BUILD_DIR)/bin/%:
	@echo "Building [email protected]"
	@mkdir -p $(@D)
	GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
	@touch [email protected]
?=

?= 是如果没有被赋值过就赋予等号后面的值

BUILD_DIR ?= build
$()

引用变量

$(BUILD_DIR)
%

匹配符号,如例:匹配所有以$(BUILD_DIR)/bin为前缀的

$(BUILD_DIR)/bin/%:
:
install : editor
    mv editor /usr/local

执行install时,如果editor有更新,那么执行tab的下一行,即mv editor /usr/local。执行该操作后,不会得到名为install的文件,因此也称作伪target。(非伪target见下text.o)

text.o : text.c com.h
    gcc -c text.c
[email protected]

[email protected]指代当前目标,就是Make命令当前构建的那个目标。比如,make foo的 [email protected] 就指代foo。


$(BUILD_DIR)/bin/%:
	@echo "Building [email protected]"
$(@D)

表示[email protected]的目录部分(不以斜杠作为结尾) ,如果[email protected]值是"dir/foo.o",那么$(@D)就是"dir",而如果[email protected]中没有包含斜杠的话,其值就是"."(当前目录)

BUILD_DIR ?= build

$(BUILD_DIR)/bin/%:
   @echo "Building [email protected]"
   @mkdir -p $(@D)
   GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
   @touch [email protected]
$(@F)

表示"[email protected]“的文件部分,如果”[email protected]“值是"dir/foo.o”,那么"$(@F)“就是"foo.o”,"$(@F)“相当于函数”$(notdir [email protected])"

	GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
abspath

$(abspath _names)
该函数主要用于将_names中的各路径转换成绝对路径,并将转换后的结果返回。

	GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
相关标签: linux

上一篇: puppeteer-recorder

下一篇: Makefile语法