# engines/cpp/Makefile # 编译 DLL(主程序通过 ctypes 直接调用) CXX = g++ LIB_SRC = dynamics_lib.cpp UNAME_S := $(shell uname -s 2>/dev/null || echo Windows) CXXFLAGS = -O3 -march=native -std=c++17 -Wall -Wextra -D_USE_MATH_DEFINES # Windows 下静态链接运行时,避免 libstdc++-6.dll / libgcc_s_seh-1.dll 版本冲突 ifeq ($(UNAME_S),Windows) STATIC_FLAGS = -static-libgcc -static-libstdc++ else STATIC_FLAGS = endif ifeq ($(UNAME_S),Linux) DLL_TARGET = build/dynamics_cpp.so DLL_FLAGS = -shared -fPIC else ifeq ($(UNAME_S),Darwin) DLL_TARGET = build/dynamics_cpp.dylib DLL_FLAGS = -dynamiclib else DLL_TARGET = build/dynamics_cpp.dll DLL_FLAGS = -shared endif .PHONY: all dll clean all: dll dll: $(DLL_TARGET) $(DLL_TARGET): $(LIB_SRC) | build $(CXX) $(CXXFLAGS) $(STATIC_FLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC) @echo " === C++ DLL built: $@ ===" build: mkdir -p build clean: rm -rf build *.o