cmake_minimum_required(VERSION 3.12) set(CMAKE_CXX_STANDARD 17) # 检测目标平台 - 通过编译器名称检测 set(TARGET_WINDOWS FALSE) if(CMAKE_C_COMPILER MATCHES "mingw" OR CMAKE_SYSTEM_NAME STREQUAL "Windows") set(TARGET_WINDOWS TRUE) endif() project(LuaCJAPILib) if(TARGET_WINDOWS) # Windows 平台配置 list(APPEND EXTRA_LIBS "") else() # Linux/macOS 配置 list(APPEND EXTRA_LIBS dl) endif() set(ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${ROOT_PATH} ${ROOT_PATH}/lua) add_subdirectory(lua) # 方案:使用 OBJECT 库 add_library(luarunner OBJECT lua_runner.cpp) target_include_directories(luarunner PRIVATE ${ROOT_PATH}/lua) # Windows 特定编译定义 if(TARGET_WINDOWS) target_compile_definitions(luarunner PRIVATE LUA_USE_WINDOWS) endif() add_library(luacjapi SHARED lua_cj_api.cpp) # 链接阶段 - 根据平台选择不同的链接选项 if(TARGET_WINDOWS) # Windows: 使用 Windows 兼容的链接选项 target_link_libraries(luacjapi PRIVATE luarunner "-Wl,--whole-archive" lua "-Wl,--no-whole-archive" m ) else() # Linux/macOS: 使用 Unix 链接选项 target_link_libraries(luacjapi PRIVATE luarunner "-Wl,--whole-archive" lua "-Wl,--no-whole-archive" m ${EXTRA_LIBS} ) endif()