Files
CPP_Core/main.cmake
T
2026-08-21 09:38:03 +08:00

75 lines
3.1 KiB
CMake

# 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_get_missing_with_rely(Psc_Core_dependencies_miss ${Psc_Core_dependencies})
if (Psc_Core_dependencies_miss)
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Psc_Core dependencies are not installed. Build Aethera_Kernel_env first")
return()
endif ()
find_package(spdlog CONFIG REQUIRED)
find_package(GTest CONFIG REQUIRED)
find_package(magic_enum CONFIG REQUIRED)
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
"$<$<COMPILE_LANGUAGE:CXX>:${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})