# Makefile测试示例
CC = gcc
CXX = g++
CFLAGS = -Wall -Wextra -O2
CXXFLAGS = -Wall -Wextra -O2 -std=c++17
TARGET = example_app
SRC_DIR = src
BUILD_DIR = build

# 查找源文件
SRCS := $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/*.cpp)
OBJS := $(SRCS:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o)
OBJS := $(OBJS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)

# 默认目标
all: $(TARGET)

# 链接目标
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $^

# 编译C++文件
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp
	@mkdir -p $(BUILD_DIR)
	$(CXX) $(CXXFLAGS) -c -o $@ $<

# 编译C文件
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
	@mkdir -p $(BUILD_DIR)
	$(CC) $(CFLAGS) -c -o $@ $<

# 清理目标
clean:
	rm -rf $(BUILD_DIR) $(TARGET)

# 安装目标
install: $(TARGET)
	install -m 755 $(TARGET) /usr/local/bin

# 测试目标
test: $(TARGET)
	./$(TARGET) --test

# 伪目标
.PHONY: all clean install test

# 依赖追踪
-include $(OBJS:.o=.d)