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)