# engines/cpp/Makefile CXX = g++ SRCS = main.cpp 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 TARGET = build/dynamics_cpp.exe 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: $(TARGET) dll: $(DLL_TARGET) $(TARGET): $(SRCS) | build $(CXX) $(CXXFLAGS) $(STATIC_FLAGS) -o $@ $(SRCS) @echo " === C++ engine built: $@ ===" $(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