149 lines
4.3 KiB
CMake
Executable File
149 lines
4.3 KiB
CMake
Executable File
cmake_minimum_required(VERSION 3.16)
|
||
|
||
project(XNCore LANGUAGES CXX)
|
||
|
||
# 第三方库路径(需要根据实际情况修改)
|
||
set(THIRD_PARTY_DIR "I:/MyPrj/XNSim/ThirdPart")
|
||
|
||
# Windows平台设置32位编译
|
||
if(WIN32)
|
||
set(CMAKE_GENERATOR_PLATFORM "Win32" CACHE STRING "Target platform" FORCE)
|
||
set(CMAKE_VS_PLATFORM_NAME "Win32" CACHE STRING "Win32/x64 build." FORCE)
|
||
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)
|
||
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)
|
||
|
||
set(CMAKE_SIZEOF_VOID_P 4)
|
||
|
||
add_definitions(-DWIN32 -D_WINDOWS)
|
||
|
||
|
||
endif()
|
||
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||
|
||
if(WIN32)
|
||
# 设置OpenSSL路径(使用缓存变量)
|
||
set(OPENSSL_ROOT_DIR "${THIRD_PARTY_DIR}/openssl" CACHE PATH "OpenSSL root directory")
|
||
set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/include" CACHE PATH "OpenSSL include directory")
|
||
set(OPENSSL_LIBRARIES "${OPENSSL_ROOT_DIR}/lib" CACHE PATH "OpenSSL library directory")
|
||
set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_ROOT_DIR}/lib/libcrypto.lib" CACHE FILEPATH "OpenSSL crypto library")
|
||
set(OPENSSL_SSL_LIBRARY "${OPENSSL_ROOT_DIR}/lib/libssl.lib" CACHE FILEPATH "OpenSSL ssl library")
|
||
|
||
# 验证OpenSSL目录
|
||
if(NOT EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/ssl.h")
|
||
message(FATAL_ERROR "OpenSSL headers not found in ${OPENSSL_INCLUDE_DIR}")
|
||
endif()
|
||
|
||
# 设置SQLite3路径
|
||
set(SQLITE3_ROOT_DIR "${THIRD_PARTY_DIR}/sqlite3/")
|
||
set(SQLITE3_INCLUDE_DIR "${SQLITE3_ROOT_DIR}/include")
|
||
set(SQLITE3_LIBRARIE "${SQLITE3_ROOT_DIR}/lib/sqlite3.lib")
|
||
|
||
# 设置tinyxml2路径
|
||
set(TINYXML2_INCLUDE_DIR "${THIRD_PARTY_DIR}/tinyxml2-6.0.0/")
|
||
file(GLOB TINYXML2_SOURCES "${THIRD_PARTY_DIR}/tinyxml2-6.0.0/*.cpp")
|
||
else()
|
||
find_package(nlohmann_json REQUIRED)
|
||
find_package(Threads REQUIRED)
|
||
find_package(SQLite3 REQUIRED)
|
||
endif()
|
||
|
||
find_package(OpenSSL REQUIRED)
|
||
if(NOT fastcdr_FOUND)
|
||
find_package(fastcdr 2 REQUIRED)
|
||
endif()
|
||
if(NOT fastdds_FOUND)
|
||
find_package(fastdds 3 REQUIRED)
|
||
endif()
|
||
|
||
set(XNCORE_SOURCES "")
|
||
set(XNCORE_IDL_SOURCES "")
|
||
|
||
add_subdirectory(XNBaseFrameObject)
|
||
add_subdirectory(XNDDSInterface)
|
||
add_subdirectory(XNDDSManager)
|
||
add_subdirectory(XNEventManager)
|
||
add_subdirectory(XNFramework)
|
||
add_subdirectory(XNGlobalDefine)
|
||
add_subdirectory(XNLogger)
|
||
add_subdirectory(XNModelManager)
|
||
add_subdirectory(XNModelObject)
|
||
add_subdirectory(XNObject)
|
||
add_subdirectory(XNScenarioManager)
|
||
add_subdirectory(XNServiceManager)
|
||
add_subdirectory(XNServiceObject)
|
||
add_subdirectory(XNThreadManager)
|
||
add_subdirectory(XNThreadObject)
|
||
add_subdirectory(XNTimeManager)
|
||
add_subdirectory(XNIDL)
|
||
|
||
if(WIN32)
|
||
add_library(XNCore SHARED
|
||
${XNCORE_SOURCES}
|
||
${XNCORE_IDL_SOURCES}
|
||
${TINYXML2_SOURCES}
|
||
${THIRD_PARTY_DIR}/nlohmann/json.hpp
|
||
)
|
||
|
||
target_include_directories(XNCore PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}
|
||
${OPENSSL_INCLUDE_DIR}
|
||
${SQLITE3_INCLUDE_DIR}
|
||
${TINYXML2_INCLUDE_DIR}
|
||
)
|
||
else()
|
||
add_library(XNCore SHARED
|
||
${XNCORE_SOURCES}
|
||
${XNCORE_IDL_SOURCES}
|
||
)
|
||
target_include_directories(XNCore PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
endif()
|
||
|
||
if(WIN32)
|
||
target_link_libraries(XNCore PRIVATE
|
||
${CMAKE_THREAD_LIBS_INIT}
|
||
fastcdr
|
||
fastdds
|
||
OpenSSL::SSL
|
||
OpenSSL::Crypto
|
||
${SQLITE3_LIBRARIE}
|
||
)
|
||
else()
|
||
target_link_libraries(XNCore PRIVATE
|
||
${CMAKE_THREAD_LIBS_INIT}
|
||
fastcdr
|
||
fastdds
|
||
pthread
|
||
OpenSSL::SSL
|
||
OpenSSL::Crypto
|
||
nlohmann_json
|
||
sqlite3
|
||
tinyxml2
|
||
dl
|
||
)
|
||
endif()
|
||
|
||
target_compile_definitions(XNCore PRIVATE XNCORE_LIBRARY)
|
||
|
||
# Check if CMAKE_INSTALL_PREFIX is set to its default value
|
||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/../Release" CACHE PATH "Install path prefix" FORCE)
|
||
endif()
|
||
|
||
include(GNUInstallDirs)
|
||
install(TARGETS XNCore
|
||
BUNDLE DESTINATION .
|
||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||
RUNTIME DESTINATION .
|
||
)
|
||
|
||
# 使用 install 命令在安装时拷贝头文件
|
||
file(GLOB_RECURSE ALL_HEADERS "*.h")
|
||
install(FILES ${ALL_HEADERS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/XNCore)
|
||
|
||
file(GLOB IDL_FILES "XNIDL/*")
|
||
install(FILES ${IDL_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/XNIDL) |