XNSim/XNCore/CMakeLists.txt

149 lines
4.3 KiB
CMake
Raw Normal View History

2025-04-28 12:25:20 +08:00
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()
2025-04-28 12:25:20 +08:00
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2025-05-22 16:22:48 +08:00
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
2025-04-28 12:25:20 +08:00
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)
2025-04-28 12:25:20 +08:00
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 "")
2025-04-28 12:25:20 +08:00
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)
2025-04-28 12:25:20 +08:00
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)
2025-04-28 12:25:20 +08:00
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()
2025-04-28 12:25:20 +08:00
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)
2025-04-28 12:25:20 +08:00
file(GLOB IDL_FILES "XNIDL/*")
install(FILES ${IDL_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/XNIDL)