-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
131 lines (97 loc) · 3.77 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
cmake_minimum_required(VERSION 3.16)
project(qthreadopenglwidget
VERSION 1.0
DESCRIPTION "Threaded Qt OpenGL Widget"
HOMEPAGE_URL "https://github.com/Thermadiag/qthreadopenglwidget"
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(GNUInstallDirs)
# project options
option(NO_WARNINGS "Treat warnings as errors" OFF)
# create source file list
file(GLOB Sources
"src/*.h"
"src/*.cpp"
)
# Disable header only mode
set(PROJECT_HEADER_ONLY 0)
set(QTOW_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
set(QTOW_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}")
set(QTOW_INSTALL_DATAROOTDIR "${CMAKE_INSTALL_DATAROOTDIR}")
set(QTOW_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/qthreadopenglwidget")
# add Qt
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(QT NAMES Qt5 Qt6 REQUIRED )
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets OpenGL Core Gui)
# add sources
add_library(qthreadopenglwidget SHARED
${Sources}
)
# add preprocessor definitions
target_compile_definitions(qthreadopenglwidget PRIVATE -DQTOW_BUILD_LIBRARY)
# link to Qt
if(${QT_VERSION_MAJOR} LESS 6)
set(QT_LIBS Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::OpenGL
)
else()
set(QT_LIBS Qt::Core
Qt::Gui
Qt::Widgets
Qt::OpenGL
)
endif()
target_link_libraries(qthreadopenglwidget PRIVATE ${QT_LIBS})
if(${QT_VERSION_MAJOR} LESS 6)
else()
find_package(Qt6 REQUIRED COMPONENTS OpenGLWidgets)
target_link_libraries(qthreadopenglwidget PRIVATE Qt6::OpenGLWidgets)
endif()
#add linker options
if (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# mingw
target_link_options(qthreadopenglwidget PRIVATE -lKernel32 -lpsapi -lBcrypt)
endif()
if(WIN32)
target_compile_definitions(qthreadopenglwidget PRIVATE -D_CRT_SECURE_NO_WARNINGS)
endif()
if(NO_WARNINGS)
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_options(qthreadopenglwidget PRIVATE /WX /W3 )
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(qthreadopenglwidget PRIVATE -Werror -Wall -Wno-c++98-compat -Wno-c++98-compat-pedantic)
else()
target_compile_options(qthreadopenglwidget PRIVATE -Werror -Wall)
endif()
endif()
target_include_directories(qthreadopenglwidget PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/qthreadopenglwidget>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
install(TARGETS qthreadopenglwidget EXPORT qthreadopenglwidget ARCHIVE DESTINATION ${QTOW_INSTALL_LIBDIR} RUNTIME DESTINATION ${QTOW_INSTALL_BINDIR} LIBRARY DESTINATION ${QTOW_INSTALL_LIBDIR})
install(EXPORT qthreadopenglwidget DESTINATION ${QTOW_CMAKEDIR})
# Install headers and sources (for header-only mode)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/QThreadOpenGLWidget.h"
DESTINATION "${CMAKE_INSTALL_PREFIX}/include")
# Configure and install qthreadopenglwidget.pc
configure_file(qthreadopenglwidget.pc.in qthreadopenglwidget.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qthreadopenglwidget.pc
DESTINATION ${QTOW_INSTALL_DATAROOTDIR}/pkgconfig)
# Configure and install seqConfig.cmake and qthreadopenglwidgetConfigVersion.cmake
include(CMakePackageConfigHelpers)
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/qthreadopenglwidgetConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/qthreadopenglwidgetConfig.cmake"
INSTALL_DESTINATION ${QTOW_INSTALL_LIBDIR}/cmake/qthreadopenglwidget
PATH_VARS )
# Generate seqConfigVersion.cmake
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/qthreadopenglwidgetConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qthreadopenglwidgetConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/qthreadopenglwidgetConfigVersion.cmake
DESTINATION ${QTOW_INSTALL_LIBDIR}/cmake/qthreadopenglwidget )