From aaf3244297e04384f548ac3b7f2b9b4fb956cfa2 Mon Sep 17 00:00:00 2001 From: taynpg Date: Wed, 12 Feb 2025 16:51:45 +0800 Subject: [PATCH] =?UTF-8?q?adj=EF=BC=9A=E9=87=8D=E6=96=B0=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E7=BC=96=E8=AF=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 +- {libdemo => demo}/CMakeLists.txt | 6 +- {libdemo => demo}/lib.cxx | 0 {libdemo => demo}/lib.h | 0 lua/CMakeLists.txt | 102 ++++++++++++++++++++++--------- 5 files changed, 76 insertions(+), 34 deletions(-) rename {libdemo => demo}/CMakeLists.txt (52%) rename {libdemo => demo}/lib.cxx (100%) rename {libdemo => demo}/lib.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index bcf5447..fec82c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,5 +16,5 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/) add_subdirectory(lua) -add_subdirectory(libdemo) +add_subdirectory(demo) add_executable(elua main.cpp) \ No newline at end of file diff --git a/libdemo/CMakeLists.txt b/demo/CMakeLists.txt similarity index 52% rename from libdemo/CMakeLists.txt rename to demo/CMakeLists.txt index 0e96e64..c14842a 100644 --- a/libdemo/CMakeLists.txt +++ b/demo/CMakeLists.txt @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.16) -project(libdemo LANGUAGES CXX) +project(demo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) if (MSVC) add_compile_options(/source-charset:utf-8) endif() -add_library(libdemo SHARED lib.h lib.cxx) -target_link_libraries(libdemo PRIVATE liblua) \ No newline at end of file +add_library(demo SHARED lib.h lib.cxx) +target_link_libraries(demo PRIVATE lua) \ No newline at end of file diff --git a/libdemo/lib.cxx b/demo/lib.cxx similarity index 100% rename from libdemo/lib.cxx rename to demo/lib.cxx diff --git a/libdemo/lib.h b/demo/lib.h similarity index 100% rename from libdemo/lib.h rename to demo/lib.h diff --git a/lua/CMakeLists.txt b/lua/CMakeLists.txt index e8e5fc7..4431b3b 100644 --- a/lua/CMakeLists.txt +++ b/lua/CMakeLists.txt @@ -1,42 +1,84 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.10) +project(Lua C) -# Set the project name and version -project(LuaProject VERSION 5.4.7 LANGUAGES C) - -# Set the C99 standard +# 设置C标准 set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) -# Set the compiler flags to disable C++ exception handling warning for MSVC -if (MSVC) - add_compile_options(/wd4530) +# 平台特定的设置 +if(WIN32) + set(PLATFORM_DEFINITIONS -DLUA_BUILD_AS_DLL) + set(PLATFORM_LIBS "") + set(CMAKE_SHARED_LIBRARY_PREFIX "") + set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") + set(CMAKE_EXECUTABLE_SUFFIX ".exe") +else() + set(PLATFORM_DEFINITIONS -DLUA_USE_LINUX) + set(PLATFORM_LIBS -lm -ldl -Wl,-E) endif() -# Include directories -include_directories(src) +# 设置源码目录 +set(SRC_DIR src) -# Collect all C source files -file(GLOB LUA_SOURCES ${CMAKE_CURRENT_LIST_DIR}/src/*.c) - -# Exclude lua.c and luac.c from the library sources -list(REMOVE_ITEM LUA_SOURCES - ${CMAKE_CURRENT_LIST_DIR}/src/lua.c - ${CMAKE_CURRENT_LIST_DIR}/src/luac.c +# Lua核心源文件 +set(CORE_SOURCES + ${SRC_DIR}/lapi.c + ${SRC_DIR}/lcode.c + ${SRC_DIR}/lctype.c + ${SRC_DIR}/ldebug.c + ${SRC_DIR}/ldo.c + ${SRC_DIR}/ldump.c + ${SRC_DIR}/lfunc.c + ${SRC_DIR}/lgc.c + ${SRC_DIR}/llex.c + ${SRC_DIR}/lmem.c + ${SRC_DIR}/lobject.c + ${SRC_DIR}/lopcodes.c + ${SRC_DIR}/lparser.c + ${SRC_DIR}/lstate.c + ${SRC_DIR}/lstring.c + ${SRC_DIR}/ltable.c + ${SRC_DIR}/ltm.c + ${SRC_DIR}/lundump.c + ${SRC_DIR}/lvm.c + ${SRC_DIR}/lzio.c ) -# Build the static library -add_library(liblua STATIC ${LUA_SOURCES}) -target_include_directories(liblua PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) +# Lua库源文件 +set(LIB_SOURCES + ${SRC_DIR}/lauxlib.c + ${SRC_DIR}/lbaselib.c + ${SRC_DIR}/lcorolib.c + ${SRC_DIR}/ldblib.c + ${SRC_DIR}/liolib.c + ${SRC_DIR}/lmathlib.c + ${SRC_DIR}/loadlib.c + ${SRC_DIR}/loslib.c + ${SRC_DIR}/lstrlib.c + ${SRC_DIR}/ltablib.c + ${SRC_DIR}/lutf8lib.c + ${SRC_DIR}/linit.c +) -# Enable position-independent code for better portability -set_target_properties(liblua PROPERTIES POSITION_INDEPENDENT_CODE ON) +# Lua可执行文件源文件 +set(LUA_SOURCES ${SRC_DIR}/lua.c) +set(LUAC_SOURCES ${SRC_DIR}/luac.c) -# Define preprocessor macros -target_compile_definitions(liblua PRIVATE LUA_COMPAT_5_3 LUA_BUILD_AS_DLL) +# 添加Lua库 +add_library(lua STATIC ${CORE_SOURCES} ${LIB_SOURCES}) +target_include_directories(lua PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) +target_compile_definitions(lua PRIVATE LUA_COMPAT_5_3 ${PLATFORM_DEFINITIONS}) -# Target for the Lua interpreter (lua.exe) -add_executable(lua src/lua.c) -target_link_libraries(lua PRIVATE liblua) +# 添加Lua可执行文件 +add_executable(lua_bin ${LUA_SOURCES}) +target_link_libraries(lua_bin lua ${PLATFORM_LIBS}) -# Target for the Lua compiler (luac.exe) -add_executable(luac src/luac.c) -target_link_libraries(luac PRIVATE liblua) +# 添加Lua编译器可执行文件 +add_executable(luac_bin ${LUAC_SOURCES}) +target_link_libraries(luac_bin lua ${PLATFORM_LIBS}) + +# 安装目标 +install(TARGETS lua lua_bin luac_bin + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) \ No newline at end of file