Files
TransPyC/includes/vqt6/CMakeLists.txt

111 lines
2.9 KiB
CMake

# ============================================================
# vqt6 CMakeLists.txt — 构建 vqt6 C 桥接层
#
# 默认产物: libvqt6_bridge.a (静态库)
# 可选产物: vqt6_bridge.dll (动态库)
#
# 使用:
# cmake -B build -S .
# cmake --build build --config Release
# ============================================================
cmake_minimum_required(VERSION 3.16)
project(vqt6_bridge CXX C)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
# 构建选项
option(VQT6_BUILD_SHARED "Build vqt6 as shared library (DLL)" OFF)
option(VQT6_BUILD_STATIC "Build vqt6 as static library" ON)
option(VQT6_BUILD_EXAMPLES "Build example programs" OFF)
# Qt6 依赖
find_package(Qt6 6.5 REQUIRED COMPONENTS
Core
Gui
Widgets
Network
)
# Win32 GUI 应用不需要控制台
if(WIN32)
set(CMAKE_WIN32_EXECUTABLE OFF)
endif()
# 公共源文件
set(VQT6_SOURCES
_bridge_core.cpp
_bridge_widgets.cpp
_bridge_gui.cpp
_bridge_network.cpp
)
set(VQT6_HEADERS
_bridge.h
_bridge_widgets.h
_bridge_gui.h
_bridge_network.h
)
# Qt 模块
set(VQT6_QT_MODULES
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Network
)
# ============================================================
# 静态库
# ============================================================
if(VQT6_BUILD_STATIC)
add_library(vqt6_bridge_static STATIC ${VQT6_SOURCES} ${VQT6_HEADERS})
target_link_libraries(vqt6_bridge_static PUBLIC ${VQT6_QT_MODULES})
target_compile_definitions(vqt6_bridge_static PUBLIC VQT6_BRIDGE_STATIC)
target_include_directories(vqt6_bridge_static PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)
set_target_properties(vqt6_bridge_static PROPERTIES
OUTPUT_NAME vqt6_bridge
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
)
endif()
# ============================================================
# 动态库
# ============================================================
if(VQT6_BUILD_SHARED)
add_library(vqt6_bridge SHARED ${VQT6_SOURCES} ${VQT6_HEADERS})
target_link_libraries(vqt6_bridge PUBLIC ${VQT6_QT_MODULES})
target_compile_definitions(vqt6_bridge PRIVATE VQT6_BRIDGE_BUILD)
target_include_directories(vqt6_bridge PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)
set_target_properties(vqt6_bridge PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
endif()
# ============================================================
# 安装
# ============================================================
install(TARGETS vqt6_bridge_static vqt6_bridge
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
install(FILES ${VQT6_HEADERS}
DESTINATION include/vqt6
)
# ============================================================
# 示例
# ============================================================
if(VQT6_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()