cmake_minimum_required(VERSION 3.22)

project(Motion)

# 开启编译数据库导出（强制开启，不被缓存覆盖）
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")

# 针对 GCC 编译器添加 UTF-8 编码选项
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")  # 仅对 GCC 生效
    # 添加 C++ 编译选项
    add_compile_options(-finput-charset=UTF-8)
    add_compile_options(-fexec-charset=UTF-8)
    
    # 若需要支持 C 语言，补充 C 编译选项
    add_compile_options($<$<COMPILE_LANGUAGE:C>:-finput-charset=UTF-8>)
    add_compile_options($<$<COMPILE_LANGUAGE:C>:-fexec-charset=UTF-8>)
endif()

if(WIN32)
    # Windows平台特定的设置
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/WIN32")
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/WIN32")
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/WIN32/static_lib")
elseif(APPLE)
    # Apple平台特定的设置
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/APPLE")
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/APPLE")
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/APPLE/static_lib")
elseif(UNIX) # 注意：Linux和macOS都满足UNIX为TRUE，所以通常先判断APPLE
    # Linux或其他类Unix系统的设置
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/UNIX")
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/UNIX")
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/$<CONFIGURATION>/UNIX/static_lib")
endif()


set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_subdirectory(${CMAKE_SOURCE_DIR}/MotionLib)
add_subdirectory(${CMAKE_SOURCE_DIR}/App)