cmake_minimum_required(VERSION 3.12) project(luajit LANGUAGES C) # ==================== LuaJIT 2.1 构建策略 ==================== # LuaJIT 仓库结构: Makefile 在根, src/ 子目录, dynasm/ 兄弟目录。 # 必须从根目录执行 make。配置期调用 make 产出 src/libluajit.a。 # 头文件 lua.h/lauxlib.h/lualib.h 在 src/ 下。 set(LJ_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) set(LJ_SRC ${LJ_ROOT}/src) set(LJ_LIB ${LJ_SRC}/libluajit.a) # 确保 dynasm 目录存在(LuaJIT 构建依赖) if(NOT EXISTS ${LJ_ROOT}/dynasm) message(FATAL_ERROR "LuaJIT dynasm directory missing at ${LJ_ROOT}/dynasm") endif() # 清理旧构建产物后重新构建(保证产物一致性) add_custom_command( OUTPUT ${LJ_LIB} COMMAND ${CMAKE_COMMAND} -E chdir ${LJ_ROOT} make clean COMMAND ${CMAKE_COMMAND} -E chdir ${LJ_ROOT} make CC=${CMAKE_C_COMPILER} BUILDMODE=static CFLAGS=-fPIC TARGET_DYLD_CC=${CMAKE_C_COMPILER} Q= DEPENDS ${LJ_ROOT}/Makefile ${LJ_SRC}/lj_arch.h WORKING_DIRECTORY ${LJ_ROOT} COMMENT "Building LuaJIT 2.1 static library (libluajit.a)" VERBATIM ) add_custom_target(lua ALL DEPENDS ${LJ_LIB}) # 向上层暴露 LuaJIT 头文件目录与静态库路径(供 lib/CMakeLists.txt 引用) set(LUAJIT_INCLUDE_DIR ${LJ_SRC} PARENT_SCOPE) set(LUAJIT_STATIC_LIB ${LJ_LIB} PARENT_SCOPE)