alkaid_release_platform/tests/data/test.mk
ekko.bao 0a0f6a6054 初次创建仓库提交代码
1. 已经构建好了架子了。
2. 添加了示例的插件
2025-04-21 06:37:06 +00:00

133 lines
2.5 KiB
Makefile

# 这是一个测试用的复杂 Makefile 示例
# 包含了各种 Makefile 语法特性用于测试解析器
# 简单变量赋值
SIMPLE_VAR = simple value
# 不同分隔符的变量赋值
COLON_VAR := immediately expanded value
# 多行变量定义
MULTILINE_VAR = first line \
second line \
third line
# 带注释的变量定义
WITH_COMMENT = value with trailing comment # 这是一个注释
# 定义函数
define MULTI_LINE_FUNCTION
echo "This is line 1"
echo "This is line 2"
echo "This is line 3"
endef
# 使用 += 追加变量内容
APPEND_VAR = initial value
APPEND_VAR += appended value
# 条件语句
ifdef DEBUG
LOG_LEVEL = debug
else
LOG_LEVEL = info
endif
# 使用函数
SOURCES = main.c util.c driver.c
OBJECTS = $(patsubst %.c,%.o,$(SOURCES))
# 空变量定义
EMPTY_VAR =
# 带特殊字符的变量定义
SPECIAL_CHARS = $$HOME/bin:/usr/local/bin:$$PATH
# 引用其他变量
COMPOUND_VAR = $(SIMPLE_VAR) and $(COLON_VAR)
# 内容中包含等号的变量
EQUAL_IN_VALUE = key1=value1 key2=value2
# 目标定义
all: build test
# 带多条命令的目标
build:
@echo "Building..." # 注释
$(CC) -o output $(SOURCES)
@echo "Build complete"
# 依赖于多个目标的规则
test: unit_test integration_test
@echo "All tests completed"
# 模式规则
%.o: %.c
$(CC) -c -o $@ $<
# 伪目标
.PHONY: all clean test
# 复杂的多行命令
clean:
@echo "Cleaning up..."
rm -f *.o
rm -f output
@echo "Clean complete"
# 变量中包含换行
NEWLINE := line1$(shell echo)line2
# 带续行符的shell命令
test_shell:
for file in $(SOURCES); do \
echo "Processing $$file"; \
cat $$file | grep "TODO"; \
done
# 使用 ?= 条件赋值
CC ?= gcc
# 使用 != 执行命令并赋值
CURRENT_DIR != pwd
# 包含其他 Makefile
-include optional.mk
include required.mk
# 导出变量到环境变量
export PATH
export JAVA_HOME = /usr/lib/jvm/default-java
# 嵌套使用变量
NESTED = $($(VARNAME))
# 使用自动变量
auto_vars: file1.c file2.c
@echo "First prerequisite: $<"
@echo "All prerequisites: $^"
@echo "Target name: $@"
# 使用通配符
HEADERS = $(wildcard *.h)
# 使用 vpath 指令
vpath %.c src
vpath %.h include
# 静态模式规则
MODULES = mod1 mod2 mod3
$(MODULES:%=%.o): %.o: %.c
$(CC) -c -o $@ $<
# 字符串替换
TEXT = Hello World
REPLACED = $(subst Hello,Goodbye,$(TEXT))
# shell 命令输出作为变量内容
VERSION := $(shell git describe --tags)
# 路径处理
SRC_PATH = src/module/file.c
FILE_NAME = $(notdir $(SRC_PATH))