# engines/c/Makefile # 编译 DLL(主程序通过 ctypes 直接调用) # make dll → 本地系统编译 # make linux → Linux 交叉编译(需 x86_64-linux-gnu-gcc) # make windows → Windows 交叉编译(需 x86_64-w64-mingw32-gcc) CC = gcc CFLAGS = -O3 -march=native -Wall -Wextra LDFLAGS = -lm LIB_SRC = dynamics_lib.c # 自动检测系统 UNAME_S := $(shell uname -s 2>/dev/null || echo Windows) # DLL 目标(平台自动选择后缀) ifeq ($(UNAME_S),Linux) DLL_TARGET = build/dynamics_c.so DLL_FLAGS = -shared -fPIC else ifeq ($(UNAME_S),Darwin) DLL_TARGET = build/dynamics_c.dylib DLL_FLAGS = -dynamiclib else DLL_TARGET = build/dynamics_c.dll DLL_FLAGS = -shared endif .PHONY: all dll clean all: dll dll: $(DLL_TARGET) $(DLL_TARGET): $(LIB_SRC) | build $(CC) $(CFLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC) $(LDFLAGS) @echo " === C DLL built: $@ ===" build: mkdir -p build clean: rm -rf build *.o