QScint.cmake 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # QScint.cmake
  2. # 在模块化构建中,这个部分代表着构建 Qscintilla
  3. # 1. 静态化构建库时产出的目标为 libQSci.a
  4. # 2. 在此处可对 QSci 目标进行详细的构建计划
  5. option(NOTEPAD_BUILD_BY_SHARED "指定 Notepad 将构建为动态库" OFF)
  6. if(TRUE)
  7. # add_subdirectory(${PROJECT_SOURCE_DIR}/src/qscint)
  8. # file(GLOB MOC_HEADER src/qscint/src/Qsci/*.h)
  9. spark_file_glob(MOC_HEADER "src/qscint/src/Qsci/*.h")
  10. set(QSciSources
  11. ${PROJECT_SOURCE_DIR}/src/qscint/src
  12. ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexers
  13. ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexlib
  14. ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/src
  15. ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/boostregex
  16. # src/qscint/src/Qsci
  17. # FAIL: only *.ui will spark_file_glob(MOC_HEADER ...)
  18. )
  19. if(NOTEPAD_BUILD_BY_SHARED)
  20. spark_add_library_path(QSci SHARED ${QSciSources} ${MOC_HEADER})
  21. else()
  22. spark_add_library_path(QSci STATIC ${QSciSources} ${MOC_HEADER})
  23. endif(NOTEPAD_BUILD_BY_SHARED)
  24. target_include_directories(QSci PRIVATE
  25. src/qscint/scintilla/boostregex
  26. src/qscint/scintilla/lexlib)
  27. target_include_directories(QSci PUBLIC
  28. src/qscint/src
  29. src/qscint/src/Qsci
  30. src/qscint/scintilla/src
  31. src/qscint/scintilla/include)
  32. if(USE_QT6)
  33. target_link_qt6(QSci)
  34. target_link_qt6_Core5Compat(QSci)
  35. target_link_qt6_PrintSupport(QSci)
  36. target_link_qt6_Concurrent(QSci)
  37. if(APPLE)
  38. # Is there anything missing?
  39. # MacExtras?
  40. endif(APPLE)
  41. else()
  42. target_link_qt5(QSci)
  43. target_link_qt5_PrintSupport(QSci)
  44. target_link_qt5_Concurrent(QSci)
  45. if(APPLE)
  46. find_package(Qt5 COMPONENTS MacExtras)
  47. target_link_libraries(QSci Qt5::MacExtras)
  48. endif(APPLE)
  49. endif(USE_QT6)
  50. endif(TRUE)
  51. # QSci 库构建时依赖了一些其它内容,像 PrintSupport,Concurrent 等
  52. # QSci 库构建...配置
  53. if(WIN32)
  54. # 在 Windows 中构建时,需要关注此库的构建形式,QScintilla 应该以何种方式编译
  55. if(NOTEPAD_BUILD_BY_SHARED)
  56. # 在 Windows 中构建时动态化的 QSci 库时,对于不同的编译器进行处理
  57. if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  58. # 在 Windows 中使用 MSVC 构建时
  59. target_compile_definitions(QSci
  60. PRIVATE
  61. SCINTILLA_QT #
  62. SCI_LEXER #
  63. INCLUDE_DEPRECATED_FEATURES #
  64. # 控制 QSCINTILLA_EXPORT 符号应为:
  65. # 构建时(导出),由外部使用时(导入)
  66. QSCINTILLA_MAKE_DLL # 在 Windows 中构建此库时应该采用 Q_DECL_EXPORT
  67. INTERFACE
  68. QSCINTILLA_DLL # 在 Windows 中使用此库时应该采用 Q_DECL_IMPORT
  69. )
  70. else()
  71. # 在 Windows 中使用 MinGW 构建时
  72. target_compile_definitions(QSci
  73. PRIVATE
  74. SCINTILLA_QT #
  75. SCI_LEXER #
  76. INCLUDE_DEPRECATED_FEATURES #
  77. )
  78. endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  79. else()
  80. # 在 Windows 中构建静态化的 QSci 库时,不同的编译器基本无区别
  81. target_compile_definitions(QSci
  82. PRIVATE
  83. SCINTILLA_QT #
  84. SCI_LEXER #
  85. INCLUDE_DEPRECATED_FEATURES #
  86. )
  87. endif(NOTEPAD_BUILD_BY_SHARED)
  88. endif(WIN32)
  89. if(UNIX)
  90. # 在 Linux 中构建时,需要关注此库的构建形式,QScintilla 应该以何种方式编译
  91. target_compile_definitions(QSci
  92. PRIVATE
  93. SCINTILLA_QT #
  94. SCI_LEXER #
  95. INCLUDE_DEPRECATED_FEATURES #
  96. # QSCINTILLA_MAKE_DLL # 在 Linux 未使用 Q_DECL_EXPORT 、 Q_DECL_IMPORT
  97. # 控制 QSCINTILLA_EXPORT 符号应为留空
  98. )
  99. endif(UNIX)
  100. # 添加 QSci 目标属性与生成器调试信息
  101. spark_cmake_debug(
  102. ">>>>>>>>>>>>>>>>>>>>>>>>>>> QSci CMake Debug <<<<<<<<<<<<<<<<<<<<<<<<<<<"
  103. "QSci LINK_LIBRARIES: $<TARGET_PROPERTY:QSci,LINK_LIBRARIES>"
  104. "QSci COMPILE_DEFINITIONS: $<TARGET_PROPERTY:QSci,COMPILE_DEFINITIONS>"
  105. "QSci INTERFACE: $<TARGET_PROPERTY:QSci,INTERFACE>"
  106. "QSci TARGET_FILE_BASE_NAME: $<TARGET_FILE_BASE_NAME:QSci>"
  107. "QSci TARGET_FILE_NAME: $<TARGET_FILE_NAME:QSci>"
  108. ">>>>>>>>>>>>>>>>>>>>>>>>>>> QSci CMake Debug <<<<<<<<<<<<<<<<<<<<<<<<<<<"
  109. )