# pfr库虽然是cmake构建但是没有安装脚本 set(Psc_Core_dependencies global::GTest global::spdlog global::magic_enum) rcl_add_dependency_action_targets(Psc_Core_env ${Psc_Core_dependencies}) set(name "Psc_Core") set_target_properties(Psc_Core_env PROPERTIES FOLDER ${name}) library_is_installed_with_rely(Psc_Core_dependencies_installed ${Psc_Core_dependencies}) if (NOT Psc_Core_dependencies_installed) set(log "[FATAL_ERROR] ${name} 依赖未安装,请先构建 ${name}_env 目标") rcl_log_append("${log}") return() else () find_package(spdlog CONFIG REQUIRED) find_package(GTest CONFIG REQUIRED) find_package(magic_enum CONFIG REQUIRED) endif () set(base_dir ${CMAKE_CURRENT_LIST_DIR}/src) set(3rd_dir ${CMAKE_CURRENT_LIST_DIR}/3rd) set(core_src_dir ${base_dir}/Psc_Cpp_Core) include(${CMAKE_CURRENT_LIST_DIR}/3rd/asio/main.cmake) add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/3rd/pfr ${CMAKE_CURRENT_BINARY_DIR}/pfr) add_library(Psc_Core_Interface INTERFACE) target_include_directories(Psc_Core_Interface INTERFACE "${base_dir}") target_include_directories(Psc_Core_Interface INTERFACE ${3rd_dir}/magic_enum/magic_enum/include) set_target_properties(Psc_Core_Interface PROPERTIES FOLDER ${name}) append_glob_source(srcs ${core_src_dir}) add_library(Psc_Core_Static STATIC ${srcs}) generate_aggregate_sources(${base_dir}/private_psc_global_include ${core_src_dir}/Base "../../private_psc_global_include" "global_include") target_precompile_headers(Psc_Core_Static PRIVATE "$<$:${core_src_dir}/Base/global_include.h>" ) target_include_directories(Psc_Core_Static PUBLIC ${base_dir}) target_include_directories(Psc_Core_Static PUBLIC ${3rd_dir}) # ============================================================ # Platform link libraries # ============================================================ if (WIN32) target_link_libraries(Psc_Core_Static PRIVATE ole32 oleaut32 wbemuuid psapi shell32 dbghelp iphlpapi ) target_compile_definitions(Psc_Core_Static PUBLIC NOMINMAX) endif () if (CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries(Psc_Core_Static PUBLIC rt dl pthread ) endif () target_link_libraries(Psc_Core_Static PUBLIC boost_pfr) target_link_libraries(Psc_Core_Static PUBLIC Psc_Core_Interface) target_link_libraries(Psc_Core_Static PUBLIC spdlog::spdlog) target_link_libraries(Psc_Core_Static PUBLIC magic_enum::magic_enum) target_link_libraries(Psc_Core_Static PUBLIC asio_object) # 主要是magic_enum等头文件 target_include_directories(Psc_Core_Static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) set_target_properties(Psc_Core_Static PROPERTIES AUTOMOC OFF AUTOUIC OFF AUTORCC OFF ) set_property(TARGET Psc_Core_Static PROPERTY POSITION_INDEPENDENT_CODE ON) set_target_properties(Psc_Core_Static PROPERTIES FOLDER ${name}) add_executable(Psc_Core_exe ${CMAKE_CURRENT_LIST_DIR}/main.cpp) target_link_libraries(Psc_Core_exe PRIVATE Psc_Core_Static) set_target_properties(Psc_Core_exe PROPERTIES FOLDER ${name})