execve_hook/Makefile

92 lines
2.1 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CC = gcc
CFLAGS = -shared -fPIC -Wall -Wextra -Werror -fno-strict-aliasing -fPIC -fno-omit-frame-pointer -fno-stack-protector -Wl,-z,relro,-z,now
LDFLAGS = -ldl
HOOK_LDFLAGS = -ldl -pthread
TARGET_NAME = intercept.so
HOOK_NAME = hook_write.so
BUILD_DIR = build
SRC_DIR = src
TESTS_DIR = tests
SRC = $(wildcard $(SRC_DIR)/*.c)
SRC := $(filter-out $(SRC_DIR)/hook_write.c, $(SRC)) # 排除 hook_write.c
OBJ = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SRC))
TARGET = $(BUILD_DIR)/$(TARGET_NAME)
HOOK_SRC = $(SRC_DIR)/hook_write.c
HOOK_OBJ = $(BUILD_DIR)/hook_write.o
HOOK_TARGET = $(BUILD_DIR)/$(HOOK_NAME)
# 测试客户端
TEST_CLIENT = $(BUILD_DIR)/test_client
TEST_CLIENT_SRC = $(TESTS_DIR)/test_client.c
TEST_CLIENT_DEPS = $(BUILD_DIR)/client.o $(BUILD_DIR)/debug.o
# 如果需要开启 debug只需执行 make DEBUG=1
ifeq ($(DEBUG),1)
CFLAGS += -DDEBUG -g
endif
# 如果需要开启 hook只需执行 make HOOK=1
ifeq ($(HOOK),1)
CFLAGS += -DHOOK
endif
# 如果跳过检查,只需执行 make NO_CONFIG_CHECK=1
ifeq ($(NO_CONFIG_CHECK),1)
CFLAGS += -DNO_CONFIG_CHECK
endif
.PHONY: all clean debug hook rebuild pre_build test_client
all: pre_build $(TARGET) $(HOOK_TARGET)
test_client: pre_build $(TEST_CLIENT)
pre_build:
ifeq ($(DEBUG),1)
@echo "Building with debug flags..."
endif
ifeq ($(HOOK),1)
@echo "Building with hook flags..."
endif
ifeq ($(NO_CONFIG_CHECK),1)
@echo "Building with NO_CONFIG_CHECK defined..."
endif
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(TARGET): $(OBJ)
@mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
$(HOOK_TARGET): $(HOOK_OBJ)
@mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -Wno-error=unused-result -o $@ $^ $(HOOK_LDFLAGS)
$(HOOK_OBJ): $(HOOK_SRC)
@mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -Wno-error=unused-result -c $< -o $@
$(TEST_CLIENT): $(TEST_CLIENT_SRC) $(TEST_CLIENT_DEPS)
@mkdir -p $(BUILD_DIR)
$(CC) -Wall -Wextra -o $@ $(TEST_CLIENT_SRC) $(TEST_CLIENT_DEPS)
clean:
rm -rf $(BUILD_DIR)
debug:
rm -rf $(BUILD_DIR)
$(MAKE) DEBUG=1
hook:
rm -rf $(BUILD_DIR)
$(MAKE) HOOK=1
rebuild: clean all