Skip to content

Commit e0291e7

Browse files
author
feihong
committed
add CMake build system support
1 parent 8e5581b commit e0291e7

File tree

5 files changed

+220
-0
lines changed

5 files changed

+220
-0
lines changed

CMakeLists.txt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
cmake_minimum_required(VERSION 3.27)
2+
3+
project(PythonQt LANGUAGES CXX VERSION 3.5.6)
4+
5+
set(CMAKE_CXX_STANDARD 11)
6+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
7+
8+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
9+
find_package(Python3 COMPONENTS Development)
10+
11+
set(PYTHONQT_SUFFIX Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}-Python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR})
12+
13+
14+
if(${QT_VERSION_MAJOR} VERSION_EQUAL 5)
15+
if(${QT_VERSION_MINOR} VERSION_LESS 3)
16+
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_50)
17+
elseif(${QT_VERSION_MINOR} VERSION_LESS 6)
18+
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_54)
19+
elseif(${QT_VERSION_MINOR} VERSION_LESS 11)
20+
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_56)
21+
elseif(${QT_VERSION_MINOR} VERSION_LESS 15)
22+
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_511)
23+
else()
24+
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_515)
25+
endif()
26+
# elseif(${QT_VERSION_MAJOR} VERSION_EQUAL 6)
27+
else()
28+
message(FATAL "No generated sources exist for Qt${QT_VERSION}")
29+
endif()
30+
31+
add_subdirectory(src)
32+
# add_subdirectory(generator)
33+
add_subdirectory(extensions)
34+
add_subdirectory(tests)
35+
# add_subdirectory(examples)

extensions/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add_subdirectory(PythonQt_QtAll)
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
project(QtAll LANGUAGES CXX)
2+
3+
set(CMAKE_AUTOMOC ON)
4+
5+
file(GLOB SOURCES *.h *.cpp)
6+
7+
if(BUILD_SHARED_LIBS)
8+
add_library(${PROJECT_NAME} SHARED)
9+
else()
10+
add_library(${PROJECT_NAME} STATIC)
11+
endif()
12+
13+
target_sources(${PROJECT_NAME} PRIVATE
14+
${SOURCES}
15+
${GENERATE_SOURCES}
16+
)
17+
18+
target_link_libraries(${PROJECT_NAME} PUBLIC
19+
Core
20+
)
21+
22+
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR})
23+
24+
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_QTALL_EXPORTS)
25+
26+
list(APPEND QTMODULES Core Gui Svg Sql Network OpenGL Xml XmlPatterns Multimedia Qml Quick UiTools WebEngineWidgets WebKit)
27+
28+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${QTMODULES})
29+
30+
foreach(QTMODULE IN LISTS QTMODULES)
31+
if(NOT TARGET Qt${QT_VERSION_MAJOR}::${QTMODULE})
32+
continue()
33+
endif()
34+
35+
string(TOLOWER ${QTMODULE} qtmodule)
36+
file(GLOB GENERATE_SOURCES
37+
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${qtmodule}/*.h
38+
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${qtmodule}/*.cpp
39+
)
40+
target_sources(${PROJECT_NAME} PRIVATE ${GENERATE_SOURCES})
41+
target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::${QTMODULE})
42+
43+
string(TOUPPER ${QTMODULE} qtmodule)
44+
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_WITH_${qtmodule})
45+
endforeach()
46+
47+
if(TARGET Qt${QT_VERSION_MAJOR}::Gui)
48+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets PrintSupport REQUIRED)
49+
target_link_libraries(${PROJECT_NAME} PUBLIC
50+
Qt${QT_VERSION_MAJOR}::Widgets
51+
Qt${QT_VERSION_MAJOR}::PrintSupport
52+
)
53+
endif()
54+
55+
if(TARGET Qt${QT_VERSION_MAJOR}::Svg AND QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
56+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS SvgWidgets REQUIRED)
57+
target_link_libraries(${PROJECT_NAME} PUBLIC
58+
Qt${QT_VERSION_MAJOR}::SvgWidgets
59+
)
60+
endif()
61+
62+
if(TARGET Qt${QT_VERSION_MAJOR}::Multimedia)
63+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS MultimediaWidgets REQUIRED)
64+
target_link_libraries(${PROJECT_NAME} PUBLIC
65+
Qt${QT_VERSION_MAJOR}::MultimediaWidgets
66+
)
67+
endif()
68+
69+
if(TARGET Qt${QT_VERSION_MAJOR}::Quick)
70+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS QuickWidgets REQUIRED)
71+
target_link_libraries(${PROJECT_NAME} PUBLIC
72+
Qt${QT_VERSION_MAJOR}::QuickWidgets
73+
)
74+
endif()
75+
76+
if(TARGET Qt${QT_VERSION_MAJOR}::WebKit)
77+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WebKitWidgets REQUIRED)
78+
target_link_libraries(${PROJECT_NAME} PUBLIC
79+
Qt${QT_VERSION_MAJOR}::WebKitWidgets
80+
)
81+
endif()
82+
83+
file(GLOB PUBLIC_HEADER *.h)
84+
85+
set_target_properties(${PROJECT_NAME} PROPERTIES
86+
OUTPUT_NAME PythonQt-QtAll-${PYTHONQT_SUFFIX}
87+
PUBLIC_HEADER "${PUBLIC_HEADER}"
88+
)
89+
90+
if(MSVC)
91+
target_compile_options(${PROJECT_NAME} PRIVATE "/bigobj")
92+
elseif(MINGW)
93+
target_compile_options(${PROJECT_NAME} PRIVATE "-Wa,-mbig-obj")
94+
endif()
95+
96+
include(GNUInstallDirs)
97+
install(TARGETS ${PROJECT_NAME}
98+
BUNDLE DESTINATION .
99+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
100+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
101+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
102+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
103+
)

src/CMakeLists.txt

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
project(Core LANGUAGES CXX)
2+
3+
set(CMAKE_AUTOMOC ON)
4+
5+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets REQUIRED)
6+
find_package(Python3 COMPONENTS Development REQUIRED)
7+
8+
file(GLOB SOURCES *.h *.cpp)
9+
10+
if(BUILD_SHARED_LIBS)
11+
add_library(${PROJECT_NAME} SHARED)
12+
else()
13+
add_library(${PROJECT_NAME} STATIC)
14+
endif()
15+
16+
file(GLOB GENERATE_SOURCES
17+
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_core_builtin/*.h
18+
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_core_builtin/*.cpp
19+
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_gui_builtin/*.h
20+
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_gui_builtin/*.cpp
21+
)
22+
23+
target_sources(${PROJECT_NAME} PRIVATE
24+
${SOURCES}
25+
${GENERATE_SOURCES}
26+
)
27+
28+
file(GLOB PUBLIC_HEADER *.h)
29+
30+
set_target_properties(${PROJECT_NAME} PROPERTIES
31+
OUTPUT_NAME PythonQt-${PYTHONQT_SUFFIX}
32+
PUBLIC_HEADER "${PUBLIC_HEADER}"
33+
)
34+
35+
target_link_libraries(${PROJECT_NAME} PUBLIC
36+
Qt${QT_VERSION_MAJOR}::Core
37+
Qt${QT_VERSION_MAJOR}::CorePrivate
38+
Qt${QT_VERSION_MAJOR}::Widgets
39+
Python3::Python
40+
)
41+
42+
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_EXPORTS PYTHONQT_CATCH_ALL_EXCEPTIONS)
43+
44+
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR})
45+
46+
if(MSVC)
47+
target_compile_options(${PROJECT_NAME} PRIVATE "/bigobj")
48+
elseif(MINGW)
49+
target_compile_options(${PROJECT_NAME} PRIVATE "-Wa,-mbig-obj")
50+
endif()
51+
52+
include(GNUInstallDirs)
53+
install(TARGETS ${PROJECT_NAME}
54+
BUNDLE DESTINATION .
55+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
56+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
57+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
58+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
59+
)

tests/CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
project(tests LANGUAGES CXX)
2+
3+
set(CMAKE_AUTOMOC ON)
4+
5+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Test REQUIRED)
6+
7+
file(GLOB SOURCES *.h *.cpp)
8+
9+
add_executable(${PROJECT_NAME})
10+
11+
target_sources(${PROJECT_NAME} PRIVATE
12+
${SOURCES}
13+
)
14+
15+
target_link_libraries(${PROJECT_NAME} PRIVATE
16+
Qt${QT_VERSION_MAJOR}::Widgets
17+
Qt${QT_VERSION_MAJOR}::Test
18+
Core
19+
QtAll
20+
)
21+
22+
add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME})

0 commit comments

Comments
 (0)