
# 定义一个函数来配置项目的默认设置
# 这包括设置输出目录和项目根目录变量
function(configure_project_defaults)
    # 检查是否在顶层 CMakeLists.txt 中调用 (可选但推荐)
    # 确保 CMAKE_SOURCE_DIR 和 CMAKE_CURRENT_SOURCE_DIR 相同
    if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
        message(WARNING "configure_project_defaults() 应该在项目的根 CMakeLists.txt 中调用。")
        # 如果您确实需要在子目录中设置不同的根目录，请调整此逻辑
    endif()

    # --- 配置输出目录 ---
    # 使用 CMAKE_BINARY_DIR 作为基础构建目录
    # ${CMAKE_BINARY_DIR} 指向您配置 CMake 时指定的构建目录
    # 例如，在 CLion 中通常是 cmake-build-debug 或 cmake-build-release
    # 如果手动运行 cmake ..，它就是您运行 cmake 命令的目录

    # **设置可执行文件输出路径**:
    # 对于单配置生成器 (如 Makefiles, Ninja), 可执行文件将位于 <build>/bin/
    # 对于多配置生成器 (如 Visual Studio, Xcode), CMake 通常会自动在此路径下附加配置名称
    # (例如 <build>/bin/Debug/, <build>/bin/Release/)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Directory for runtime executables")
    message(STATUS "运行时输出目录设置为: ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")

    # **设置库文件输出路径 (共享库和静态库)**:
    # 规则同上，库文件将位于 <build>/lib/ 或 <build>/lib/<Config>/
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib CACHE PATH "Directory for shared libraries")
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib CACHE PATH "Directory for static libraries")
    message(STATUS "库输出目录设置为: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
    message(STATUS "存档输出目录设置为: ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")

    # --- 提示 ---
    # 这种全局设置输出目录的方法对于中小型项目是常见的。
    # 对于更复杂的项目或需要更细粒度控制的情况，可以考虑为每个目标（target）单独设置输出目录属性：
    # 例如:
    # add_executable(my_app main.cpp)
    # set_target_properties(my_app PROPERTIES
    #     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/executables"
    # )
    # add_library(my_lib STATIC my_lib.cpp)
    # set_target_properties(my_lib PROPERTIES
    #     ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/static_libs"
    # )
endfunction()