2
0
Эх сурвалжийг харах

refactor: 提取头文件检索代码

SongZihuan 3 жил өмнө
parent
commit
6030607d36

+ 21 - 2
deps/deps.cmake

@@ -27,6 +27,7 @@ if (WIN32 AND NOT CYGWIN)  # cygwin 不依赖 dl
                       -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
                   BUILD_DIR "dlfcn")
     set(dlfcn_lib dlfcn-win32::dl)
+    get_target_property(dlfcn_include_dir dlfcn-win32::dl INTERFACE_INCLUDE_DIRECTORIES)
 
     get_target_property(_dlfcn_include dlfcn-win32::dl INTERFACE_INCLUDE_DIRECTORIES)  # INTERFACE_INCLUDE_DIRECTORIES
     find_path(dlfcn_h_file NAMES dlfcn.h HINTS ${_dlfcn_include} DOC "The directory of dlfcn.h" REQUIRED NO_DEFAULT_PATH)
@@ -40,9 +41,16 @@ else()
     set(dlfcn_root ${DLFCN_ROOT})
     if (dlfcn_root)
         find_library(dlfcn_path dl REQUIRED HINTS ${dlfcn_root})
+        find_path(dlfcn_include_dir dl.h HINTS ${dlfcn_root})
     else()
-        find_library(dlfcn_path dl REQUIRED HINTS ${dlfcn_root})
+        find_library(dlfcn_path dl REQUIRED)
+        find_path(dlfcn_include_dir dlfcn.h)
+    endif()
+
+    if (NOT dlfcn_include_dir)
+        set(dlfcn_include_dir "")
     endif()
+
     unset(dlfcn_root)
     set(dlfcn_lib ${dlfcn_path})
 endif()
@@ -64,6 +72,7 @@ cfep_find_dir(PCRE2
               BUILD_DIR "pcre2")
 unset(PCRE2_USE_STATIC_LIBS)
 set(pcre2_lib PCRE2::8BIT)
+get_target_property(pcre2_include_dir PCRE2::8BIT INTERFACE_INCLUDE_DIRECTORIES)
 cfep_install(PCRE2 PREFIX ${deps_install_dir})
 
 if (_print)
@@ -83,6 +92,7 @@ cfep_find_dir(FFlags
                   -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
               BUILD_DIR "fflags")
 set(fflags_lib FFlags::fflags)
+get_target_property(fflags_include_dir FFlags::fflags INTERFACE_INCLUDE_DIRECTORIES)
 
 install(DIRECTORY "${fflags_INCLUDE_DIRS}/" DESTINATION ${INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")  # 安装fflags.h
 install(FILES ${CMAKE_CURRENT_LIST_DIR}/cmake/FindFFlags.cmake DESTINATION ${deps_install_dir}/cmake)  # 安装find程序
@@ -102,6 +112,7 @@ if (MSVC)
                   -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
                   BUILD_DIR "pthread")
     set(pthread_lib PThreadWin32::pthread)
+    get_target_property(pthread_include_dir PThreadWin32::pthread INTERFACE_INCLUDE_DIRECTORIES)
 
     install(DIRECTORY "${pthread_INCLUDE_DIRS}/" DESTINATION ${INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")  # 安装fflags.h
     install(FILES ${CMAKE_CURRENT_LIST_DIR}/cmake/FindPThreadWin32.cmake DESTINATION ${deps_install_dir}/cmake)  # 安装find程序
@@ -113,4 +124,12 @@ else()
         message(FATAL_ERROR "pthread not found")
     endif()
     set(pthread_lib Threads::Threads)
-endif()
+    get_target_property(pthread_include_dir Threads::Threads INTERFACE_INCLUDE_DIRECTORIES)
+    if (NOT pthread_include_dir)
+        set(pthread_include_dir "")
+    endif()
+endif()
+
+
+set(base_include_dir ${dlfcn_include_dir} ${pcre2_include_dir} ${fflags_include_dir} ${pthread_include_dir})
+set(base_libraries ${dlfcn_lib} ${pcre2_lib} ${fflags_lib} ${pthread_lib})

+ 26 - 1
src/CMakeLists.txt

@@ -1,4 +1,29 @@
-add_subdirectory(tool)
+set(build_include_tool ${PROJECT_SOURCE_DIR}/include/tool)
+set(install_include_tool ${INSTALL_INCLUDEDIR})
+
+set(build_include_core ${PROJECT_SOURCE_DIR}/include/core)
+set(build_include_core_info ${PROJECT_SOURCE_DIR}/include/core/info)
+set(install_include_core ${INSTALL_INCLUDEDIR})
+
+set(build_include_runtime ${PROJECT_SOURCE_DIR}/include/runtime)
+set(install_include_runtime ${INSTALL_INCLUDEDIR})
+
+set(build_include_
+    ${hgt_dir}
+    ${base_include_dir}
+    ${build_include_tool}
+    ${build_include_core}
+    ${build_include_core_info}
+    ${build_include_runtime})
+
+set(build_include)
+foreach(dir IN LISTS build_include_)
+    list(APPEND build_include $<BUILD_INTERFACE:${dir}>)
+endforeach()
+
+set(install_include $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>)
+
+add_subdirectory(tool)
 add_subdirectory(core)  # core 依赖 tool
 add_subdirectory(runtime)  # runtime 依赖 core
 

+ 4 - 10
src/core/CMakeLists.txt

@@ -6,9 +6,6 @@ file(GLOB private_h
      LIST_DIRECTORIES FALSE
      ${CMAKE_CURRENT_LIST_DIR}/*.h)
 
-set(build_include_core ${PROJECT_SOURCE_DIR}/include/core)
-set(install_include_core ${INSTALL_INCLUDEDIR})
-
 file(GLOB public_h
      LIST_DIRECTORIES FALSE
      RELATIVE "${build_include_core}"
@@ -16,8 +13,8 @@ file(GLOB public_h
 
 file(GLOB public_h_info
      LIST_DIRECTORIES FALSE
-     RELATIVE "${build_include_core}/info"
-     "${build_include_core}/info/*.h")
+     RELATIVE "${build_include_core_info}"
+     "${build_include_core_info}/*.h")
 
 set(public_h_build)
 set(public_h_install)
@@ -29,7 +26,7 @@ foreach(h IN LISTS public_h)
 endforeach()
 
 foreach(h IN LISTS public_h_info)
-    file(RELATIVE_PATH _path ${CMAKE_CURRENT_LIST_DIR} "${build_include_core}/info/${h}")
+    file(RELATIVE_PATH _path ${CMAKE_CURRENT_LIST_DIR} "${build_include_core_info}/${h}")
     list(APPEND public_h_build   "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${_path}>")  # 相对路径的转换, 此处只能使用相对路径
     list(APPEND public_h_install "$<INSTALL_INTERFACE:${install_include_core}/${h}>")
 endforeach()
@@ -40,10 +37,7 @@ add_library(core-static-s STATIC "")  # core和tool静态库
 
 foreach(tgt core-shared-t core-shared-s core-static-s)
     target_sources(${tgt} PRIVATE ${source} ${private_h} PUBLIC ${public_h_build} ${public_h_install})
-    target_include_directories(${tgt} PUBLIC
-                               $<BUILD_INTERFACE:${build_include_core}>
-                               $<BUILD_INTERFACE:${build_include_core}/info>
-                               $<INSTALL_INTERFACE:${install_include_core}>)
+    target_include_directories(${tgt} PUBLIC ${build_include} ${install_include})
     set_target_properties(${tgt} PROPERTIES
                           PUBLIC_HEADER "${public_h_build}"
                           PRIVATE_HEADER "${private_h}")  # PRIVATE_HEADER私有头文件, 可以用于高级开发

+ 2 - 5
src/runtime/CMakeLists.txt

@@ -18,9 +18,6 @@ file(GLOB private_h_core
      LIST_DIRECTORIES FALSE
      ${CMAKE_CURRENT_LIST_DIR}/../core/*.h)  # 需要使用 core 的特定头文件 (高级开发)
 
-set(build_include_runtime ${PROJECT_SOURCE_DIR}/include/runtime)
-set(install_include_runtime ${INSTALL_INCLUDEDIR})
-
 file(GLOB public_h
      LIST_DIRECTORIES FALSE
      RELATIVE "${build_include_runtime}"
@@ -49,8 +46,8 @@ foreach(tgt aFun-xx-libs aFun-cx-libs aFun-ct-libs)
                                    "${CMAKE_CURRENT_LIST_DIR}/../core"
                                    "${CMAKE_CURRENT_LIST_DIR}"  # aFunTool内的程序需要使用
                                PUBLIC
-                                   $<BUILD_INTERFACE:${build_include_runtime}>
-                                   $<INSTALL_INTERFACE:${install_include_runtime}>)
+                                   ${build_include}
+                                   ${install_include})
     set_target_properties(${tgt} PROPERTIES PUBLIC_HEADER "${public_h_build}")
     define_FILENAME(${tgt})
 endforeach()

+ 4 - 7
src/tool/CMakeLists.txt

@@ -9,9 +9,6 @@ file(GLOB private_h
      LIST_DIRECTORIES FALSE
      ${CMAKE_CURRENT_LIST_DIR}/*.h)
 
-set(build_include_tool ${PROJECT_SOURCE_DIR}/include/tool)
-set(install_include_tool ${INSTALL_INCLUDEDIR})
-
 file(GLOB public_h
      LIST_DIRECTORIES FALSE
      RELATIVE "${build_include_tool}"
@@ -31,10 +28,7 @@ add_library(tool-static STATIC "")
 
 foreach(tgt tool-shared tool-static)
     target_sources(${tgt} PRIVATE ${source} ${private_h} PUBLIC ${public_h_build} ${public_h_install})
-    target_include_directories(${tgt} PUBLIC
-                               $<BUILD_INTERFACE:${build_include_tool}>
-                               $<INSTALL_INTERFACE:${install_include_tool}>)
-    target_link_libraries(${tgt} PUBLIC ${hgt-lib} ${dlfcn_lib} ${pcre2_lib} ${fflags_lib} ${pthread_lib})
+    target_include_directories(${tgt} PUBLIC ${build_include} ${install_include})
     set_target_properties(${tgt} PROPERTIES
                           PUBLIC_HEADER "${public_h_build}")
     if(_build_mem)
@@ -43,6 +37,9 @@ foreach(tgt tool-shared tool-static)
     define_FILENAME(${tgt})
 endforeach()
 
+target_link_libraries(tool-shared PUBLIC ${hgt-lib} ${dlfcn_lib} ${pcre2_lib} ${fflags_lib} ${pthread_lib})
+target_link_libraries(tool-static PUBLIC ${hgt-lib} ${dlfcn_lib} ${pcre2_lib} ${fflags_lib} ${pthread_lib})
+
 set_target_properties(tool-shared PROPERTIES OUTPUT_NAME "aFunTool")
 set_target_properties(tool-static PROPERTIES OUTPUT_NAME "aFunTool-static")