add_compile_options("$<$:/source-charset:utf-8>") add_compile_options("$<$:/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()