Files
dl/project/project.cmake
T
2026-09-16 14:07:40 +08:00

166 lines
5.2 KiB
CMake

add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
# 设置处理
if (USE_RENDER)
if (DL_DISABLE_RENDER)
message(SEND_ERROR ${PROJECT_NAME}"必须启动绘图系统,将会编译失败(DL_DISABLE_RENDER)!")
endif()
endif()
if (NOT DEFINED USE_CONSOLE)
set(USE_CONSOLE true)
endif()
if(WIN32 AND (NOT DEFINED USE_CRASH_RPT))
set(USE_CRASH_RPT true)
endif()
if(USE_CRASH_RPT)
add_compile_definitions(DL_USE_CRASH_RPT)
endif()
# 项目路径
message("项目路径:" ${PROJECT_SOURCE_DIR})
message("资源路径:" ${PATH_RES})
message("输出路径:" ${PROJECT_BINARY_DIR})
# 添加源、设置可执行文件
set(IS_FIRST TRUE)
foreach(dir ${PATH_SRC})
if(${IS_FIRST})
set(IS_FIRST FALSE)
message("代码路径:" ${dir})
# 第一个作为根目录
include_directories(${dir})
else()
message("其他代码路径: ${dir}")
endif()
aux_source_directory(${dir} SRC_LIST)
endforeach()
list(LENGTH SRC_LIST SRC_LIST_NUM)
message("源文件数:" ${SRC_LIST_NUM})
# 目标文件夹
set(PATH_OUT ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PATH_OUT})
# 安卓为动态链接库
if (NOT CMAKE_SYSTEM_NAME MATCHES "Android")
if(USE_CONSOLE)
add_compile_definitions(DL_USE_CONSOLE)
add_executable (${PROJECT_NAME} ${SRC_LIST})
else()
add_executable (${PROJECT_NAME} WIN32 ${SRC_LIST})
endif()
else()
add_library (${PROJECT_NAME} SHARED ${SRC_LIST})
endif()
if (NOT CMAKE_SYSTEM_NAME MATCHES "Android")
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD 23)
endif()
# dl库
include_directories(${CMAKE_SOURCE_DIR}/dl)
target_link_libraries(${PROJECT_NAME} dlx)
# fmt
include_directories(${CMAKE_SOURCE_DIR}/third/fmt/include)
# json
include_directories(${CMAKE_SOURCE_DIR}/third/json)
# tinyxml2
include_directories(${CMAKE_SOURCE_DIR}/third/tinyxml2)
# asio
include_directories(${CMAKE_SOURCE_DIR}/third/asio/include)
# angelscript
include_directories(${CMAKE_SOURCE_DIR}/third/angelscript/angelscript/include)
# lua
include_directories(${CMAKE_SOURCE_DIR}/third/lua)
# LuaBridge3
include_directories(${CMAKE_SOURCE_DIR}/third/LuaBridge3/Source)
# infoware
include_directories(${CMAKE_SOURCE_DIR}/third/infoware/include)
# simd
include_directories(${CMAKE_SOURCE_DIR}/third/simde)
# magic enmu
include_directories(${CMAKE_SOURCE_DIR}/third/magic_enum/include)
# CrashRpt
if(WIN32 AND USE_CRASH_RPT)
include_directories(${CMAKE_SOURCE_DIR}/third/CrashRpt/include)
target_link_libraries(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/third/CrashRpt/${ARCH}/CrashRpt1403.lib)
endif()
# dl资源文件夹
set(DL_PATH_RES ${CMAKE_SOURCE_DIR}/res)
# vld资源文件夹
set(DL_PATH_VLD ${CMAKE_SOURCE_DIR}/third/vld/bin/${ARCH})
# CrashRpt资源文件夹
set(DL_PATH_CR ${CMAKE_SOURCE_DIR}/third/CrashRpt/${ARCH})
# 创建软链接、复制必要资源
add_custom_command(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PATH_OUT}
COMMAND ${CMAKE_COMMAND} -E create_symlink ${PATH_RES} ${PATH_OUT}
COMMENT "创建资源软链接,并复制资源"
)
# 复制必要资源
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.gitignore")
add_custom_command(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/project/template.gitignore ${CMAKE_CURRENT_SOURCE_DIR}/.gitignore
COMMENT "复制.gitignore文件模板"
)
endif()
# 复制dl必要资源(重新生成代码的时候才会触发)
if (USE_RENDER)
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${DL_PATH_RES}/dl ${PATH_OUT}/dl)
endif()
if(MSVC)
# 复制vld
if (CMAKE_BUILD_TYPE MATCHES "Debug")
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${DL_PATH_VLD} ${PATH_OUT})
if(NOT EXISTS "${PATH_RES}/vld.ini")
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/third/vld/vld.ini ${PATH_OUT})
endif()
endif()
# 复制CrashRpt
if (CMAKE_BUILD_TYPE MATCHES "Release" AND USE_CRASH_RPT)
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${DL_PATH_CR}/CrashRpt1403.dll
${DL_PATH_CR}/CrashSender1403.exe
${CMAKE_SOURCE_DIR}/third/CrashRpt/crashrpt_lang.ini
${PATH_OUT})
endif()
endif()
# 子项目暂不安装
if (false)
install(DIRECTORY ${PATH_RES}/ DESTINATION bin/${PROJECT_NAME})
if (USE_RENDER)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/dl DESTINATION bin/${PROJECT_NAME})
endif()
if (CMAKE_BUILD_TYPE MATCHES "Debug")
install(DIRECTORY ${DL_PATH_VLD}/ DESTINATION bin/${PROJECT_NAME})
install(FILES ${CMAKE_SOURCE_DIR}/third/vld/vld.ini DESTINATION bin/${PROJECT_NAME})
endif()
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME})
endif()