cmake_minimum_required(VERSION 3.15) project(StellarX VERSION 1.0.0 LANGUAGES CXX) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Windows特定设置 if(WIN32) add_definitions(-DWIN32 -D_WINDOWS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # 设置Windows子系统 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS") endif() # 设置输出目录 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 包含目录 include_directories(include) # Windows API库 if(WIN32) find_library(GDI32_LIBRARY gdi32) find_library(USER32_LIBRARY user32) find_library(KERNEL32_LIBRARY kernel32) set(WIN32_LIBS ${GDI32_LIBRARY} ${USER32_LIBRARY} ${KERNEL32_LIBRARY}) endif() # 创建库 file(GLOB_RECURSE SOURCES "src/*.cpp") add_library(StellarX STATIC ${SOURCES}) # 链接Windows库 if(WIN32) target_link_libraries(StellarX ${WIN32_LIBS}) endif() # 设置库属性 set_target_properties(StellarX PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1 PUBLIC_HEADER "include/StellarX/StellarX.h" OUTPUT_NAME "StellarX" ) # 安装规则 install(DIRECTORY include/StellarX DESTINATION include) install(TARGETS StellarX ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin PUBLIC_HEADER DESTINATION include/StellarX ) # 示例程序 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/examples) file(GLOB EXAMPLE_SOURCES "examples/*.cpp") foreach(example_source ${EXAMPLE_SOURCES}) get_filename_component(example_name ${example_source} NAME_WE) add_executable(${example_name} ${example_source}) target_link_libraries(${example_name} StellarX ${WIN32_LIBS}) # 设置Windows子系统 if(WIN32) set_target_properties(${example_name} PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS" ) endif() # 安装示例 install(TARGETS ${example_name} DESTINATION bin) endforeach() endif() # 文档生成选项 option(BUILD_DOCS "Build documentation" OFF) if(BUILD_DOCS) find_package(Doxygen) if(Doxygen_FOUND) set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/docs) set(DOXYGEN_USE_MDFILE_AS_MAINPAGE ${CMAKE_CURRENT_SOURCE_DIR}/README.md) set(DOXYGEN_PROJECT_NAME "StellarX GUI Framework") set(DOXYGEN_PROJECT_NUMBER ${PROJECT_VERSION}) set(DOXYGEN_PROJECT_BRIEF "A lightweight, modular C++ GUI framework for Windows") set(DOXYGEN_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src) set(DOXYGEN_RECURSIVE YES) set(DOXYGEN_EXTRACT_ALL YES) set(DOXYGEN_EXTRACT_PRIVATE YES) set(DOXYGEN_EXTRACT_STATIC YES) set(DOXYGEN_SOURCE_BROWSER YES) set(DOXYGEN_GENERATE_TREEVIEW YES) set(DOXYGEN_HAVE_DOT YES) set(DOXYGEN_CALL_GRAPH YES) set(DOXYGEN_CALLER_GRAPH YES) doxygen_add_docs( docs ${DOXYGEN_INPUT} COMMENT "Generate HTML documentation" ) install(DIRECTORY ${DOXYGEN_OUTPUT_DIRECTORY}/html DESTINATION docs) endif() endif() # 打包配置 include(InstallRequiredSystemLibraries) set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_DESCRIPTION "A lightweight, modular C++ GUI framework for Windows") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "星垣 (StellarX) - A lightweight Windows GUI framework") set(CPACK_PACKAGE_VENDOR "StellarX Development Team") set(CPACK_PACKAGE_CONTACT "contact@stellarx.dev") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_PACKAGE_INSTALL_DIRECTORY "StellarX") set(CPACK_NSIS_MODIFY_PATH ON) if(WIN32) set(CPACK_GENERATOR "ZIP;NSIS") else() set(CPACK_GENERATOR "ZIP") endif() include(CPack)