adj:重新调整编译。

This commit is contained in:
taynpg 2025-02-12 16:51:45 +08:00
parent e78cd51d05
commit aaf3244297
5 changed files with 76 additions and 34 deletions

View File

@ -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}/) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/)
add_subdirectory(lua) add_subdirectory(lua)
add_subdirectory(libdemo) add_subdirectory(demo)
add_executable(elua main.cpp) add_executable(elua main.cpp)

View File

@ -1,11 +1,11 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(libdemo LANGUAGES CXX) project(demo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
if (MSVC) if (MSVC)
add_compile_options(/source-charset:utf-8) add_compile_options(/source-charset:utf-8)
endif() endif()
add_library(libdemo SHARED lib.h lib.cxx) add_library(demo SHARED lib.h lib.cxx)
target_link_libraries(libdemo PRIVATE liblua) target_link_libraries(demo PRIVATE lua)

View File

@ -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 # C
project(LuaProject VERSION 5.4.7 LANGUAGES C)
# Set the C99 standard
set(CMAKE_C_STANDARD 99) 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) if(WIN32)
add_compile_options(/wd4530) 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() endif()
# Include directories #
include_directories(src) set(SRC_DIR src)
# Collect all C source files # Lua
file(GLOB LUA_SOURCES ${CMAKE_CURRENT_LIST_DIR}/src/*.c) set(CORE_SOURCES
${SRC_DIR}/lapi.c
# Exclude lua.c and luac.c from the library sources ${SRC_DIR}/lcode.c
list(REMOVE_ITEM LUA_SOURCES ${SRC_DIR}/lctype.c
${CMAKE_CURRENT_LIST_DIR}/src/lua.c ${SRC_DIR}/ldebug.c
${CMAKE_CURRENT_LIST_DIR}/src/luac.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 # Lua
add_library(liblua STATIC ${LUA_SOURCES}) set(LIB_SOURCES
target_include_directories(liblua PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) ${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 # Lua
set_target_properties(liblua PROPERTIES POSITION_INDEPENDENT_CODE ON) set(LUA_SOURCES ${SRC_DIR}/lua.c)
set(LUAC_SOURCES ${SRC_DIR}/luac.c)
# Define preprocessor macros # Lua
target_compile_definitions(liblua PRIVATE LUA_COMPAT_5_3 LUA_BUILD_AS_DLL) 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) # Lua
add_executable(lua src/lua.c) add_executable(lua_bin ${LUA_SOURCES})
target_link_libraries(lua PRIVATE liblua) target_link_libraries(lua_bin lua ${PLATFORM_LIBS})
# Target for the Lua compiler (luac.exe) # Lua
add_executable(luac src/luac.c) add_executable(luac_bin ${LUAC_SOURCES})
target_link_libraries(luac PRIVATE liblua) target_link_libraries(luac_bin lua ${PLATFORM_LIBS})
#
install(TARGETS lua lua_bin luac_bin
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)