Skip to content

Commit 40a8d9e

Browse files
committed
Added CMake project file
CMake has been announced as the build system of choice for Qt in the future so it's useful to provide a project file for it Also added the possibility to compile as a static library
1 parent 9af6622 commit 40a8d9e

File tree

4 files changed

+201
-0
lines changed

4 files changed

+201
-0
lines changed

CMakeLists.txt

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
cmake_minimum_required(VERSION 3.3)
2+
set(ads_VERSION "2.3.2")
3+
set(CMAKE_CXX_STANDARD 11)
4+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
5+
set(CMAKE_CXX_EXTENSIONS OFF)
6+
set(CMAKE_AUTOMOC ON)
7+
set(CMAKE_AUTORCC ON)
8+
project(QtAdvancedDockingSystem VERSION ${ads_VERSION})
9+
option(BUILD_STATIC "Build the static library" OFF)
10+
option(BUILD_EXAMPLES "Build the examples" ON)
11+
set(REQUIRED_QT_VERSION 5.0.0)
12+
find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED)
13+
find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED)
14+
find_package(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED)
15+
message(STATUS "Found Qt ${Qt5Core_VERSION}")
16+
set(ads_INCLUDE ${ads_INCLUDE} ${Qt5Core_INCLUDE_DIRS})
17+
set(ads_INCLUDE ${ads_INCLUDE} "${CMAKE_CURRENT_SOURCE_DIR}/src")
18+
set(ads_LIBS ${ads_LIBS} ${Qt5Core_LIBRARIES})
19+
set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ${Qt5Core_COMPILE_DEFINITIONS})
20+
set(ads_LIBS ${ads_LIBS} ${Qt5Gui_LIBRARIES})
21+
set(ads_INCLUDE ${ads_INCLUDE} ${Qt5Gui_INCLUDE_DIRS})
22+
set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ${Qt5Gui_COMPILE_DEFINITIONS})
23+
set(ads_LIBS ${ads_LIBS} ${Qt5Widgets_LIBRARIES})
24+
set(ads_INCLUDE ${ads_INCLUDE} ${Qt5Widgets_INCLUDE_DIRS})
25+
set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS})
26+
if(BUILD_STATIC)
27+
set(CMAKE_STATIC_LIBRARY_SUFFIX "_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
28+
endif()
29+
set(ads_SRCS
30+
src/ads_globals.cpp
31+
src/DockAreaTabBar.cpp
32+
src/DockAreaTitleBar.cpp
33+
src/DockAreaWidget.cpp
34+
src/DockContainerWidget.cpp
35+
src/DockManager.cpp
36+
src/DockOverlay.cpp
37+
src/DockSplitter.cpp
38+
src/DockWidget.cpp
39+
src/DockWidgetTab.cpp
40+
src/ElidingLabel.cpp
41+
src/FloatingDockContainer.cpp
42+
src/ads.qrc
43+
)
44+
set(ads_INSTALL_INCLUDE
45+
src/ads_globals.h
46+
src/DockAreaTabBar.h
47+
src/DockAreaTitleBar.h
48+
src/DockAreaWidget.h
49+
src/DockContainerWidget.h
50+
src/DockManager.h
51+
src/DockOverlay.h
52+
src/DockSplitter.h
53+
src/DockWidget.h
54+
src/DockWidgetTab.h
55+
src/ElidingLabel.h
56+
src/FloatingDockContainer.h
57+
)
58+
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
59+
set(ads_PlatformDir "x64")
60+
else()
61+
set(ads_PlatformDir "x86")
62+
endif()
63+
if(BUILD_STATIC)
64+
add_library(ads STATIC ${ads_SRCS})
65+
set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ADS_STATIC)
66+
else()
67+
add_library(ads SHARED ${ads_SRCS})
68+
set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ADS_SHARED_EXPORT)
69+
endif()
70+
install(FILES ${ads_INSTALL_INCLUDE}
71+
DESTINATION include
72+
COMPONENT headers
73+
)
74+
install(FILES
75+
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md"
76+
"${CMAKE_CURRENT_SOURCE_DIR}/gnu-lgpl-v2.1.md"
77+
DESTINATION license
78+
COMPONENT license
79+
)
80+
install(TARGETS ads
81+
EXPORT adsBinary
82+
RUNTIME DESTINATION bin COMPONENT library
83+
LIBRARY DESTINATION lib COMPONENT library
84+
ARCHIVE DESTINATION lib COMPONENT library
85+
)
86+
target_include_directories(ads PUBLIC
87+
$<BUILD_INTERFACE:${ads_INCLUDE}>
88+
$<INSTALL_INTERFACE:include>
89+
)
90+
target_link_libraries(ads PUBLIC ${ads_LIBS})
91+
target_compile_definitions(ads PRIVATE ${ads_COMPILE_DEFINE})
92+
set_target_properties(ads PROPERTIES
93+
VERSION ${ads_VERSION}
94+
EXPORT_NAME "Qt Advanced Docking System"
95+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
96+
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
97+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin"
98+
)
99+
if(BUILD_EXAMPLES)
100+
add_subdirectory(example)
101+
add_subdirectory(demo)
102+
endif()
103+

demo/CMakeLists.txt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
cmake_minimum_required(VERSION 3.3)
2+
set (CMAKE_CXX_STANDARD 11)
3+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
4+
set(CMAKE_CXX_EXTENSIONS OFF)
5+
set(CMAKE_AUTOMOC ON)
6+
set(CMAKE_AUTOUIC ON)
7+
set(CMAKE_AUTORCC ON)
8+
project(ads_demo VERSION "1.0")
9+
set(REQUIRED_QT_VERSION 5.0.0)
10+
find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED)
11+
find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED)
12+
find_package(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED)
13+
set(ads_demo_LIBS ${ads_demo_LIBS} ${Qt5Core_LIBRARIES})
14+
set(ads_demo_INCLUDE ${ads_demo_INCLUDE} ${Qt5Core_INCLUDE_DIRS})
15+
set(ads_demo_COMPILE_DEFINE ${ads_demo_COMPILE_DEFINE} ${Qt5Core_COMPILE_DEFINITIONS} )
16+
set(ads_demo_LIBS ${ads_demo_LIBS} ${Qt5Gui_LIBRARIES})
17+
set(ads_demo_INCLUDE ${ads_demo_INCLUDE} ${Qt5Gui_INCLUDE_DIRS})
18+
set(ads_demo_COMPILE_DEFINE ${ads_demo_COMPILE_DEFINE} ${Qt5Gui_COMPILE_DEFINITIONS})
19+
set(ads_demo_LIBS ${ads_demo_LIBS} ${Qt5Widgets_LIBRARIES})
20+
set(ads_demo_INCLUDE ${ads_demo_INCLUDE} ${Qt5Widgets_INCLUDE_DIRS})
21+
set(ads_demo_COMPILE_DEFINE ${ads_demo_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS})
22+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
23+
set(ads_demo_SRCS
24+
main.cpp
25+
MainWindow.cpp
26+
MainWindow.ui
27+
main.qrc
28+
)
29+
add_executable(ads_demo WIN32 ${ads_demo_SRCS})
30+
if(BUILD_STATIC)
31+
set(ads_demo_DEFINE ${ads_demo_DEFINE} ADS_STATIC)
32+
endif()
33+
add_dependencies(ads_demo ads)
34+
target_include_directories(ads_demo PUBLIC
35+
$<BUILD_INTERFACE:${ads_demo_INCLUDE}>
36+
$<INSTALL_INTERFACE:include>
37+
)
38+
target_include_directories(ads_demo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ${ads_demo_INCLUDE})
39+
target_link_libraries(ads_demo PRIVATE ads ${ads_demo_LIBS})
40+
target_compile_definitions(ads_demo PRIVATE ${ads_demo_DEFINE})
41+
set_target_properties(ads_demo PROPERTIES
42+
VERSION "1.0"
43+
SOVERSION 1
44+
EXPORT_NAME "Qt Advanced Docking System Demo"
45+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/demo"
46+
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/demo"
47+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin/demo"
48+
)

example/CMakeLists.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
cmake_minimum_required(VERSION 3.3)
2+
set (CMAKE_CXX_STANDARD 11)
3+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
4+
set(CMAKE_CXX_EXTENSIONS OFF)
5+
set(CMAKE_AUTOMOC ON)
6+
set(CMAKE_AUTOUIC ON)
7+
project(ads_example VERSION "1.0")
8+
set(REQUIRED_QT_VERSION 5.0.0)
9+
find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED)
10+
find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED)
11+
find_package(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED)
12+
set(ads_example_LIBS ${ads_example_LIBS} ${Qt5Core_LIBRARIES})
13+
set(ads_example_INCLUDE ${ads_example_INCLUDE} ${Qt5Core_INCLUDE_DIRS})
14+
set(ads_example_COMPILE_DEFINE ${ads_example_COMPILE_DEFINE} ${Qt5Core_COMPILE_DEFINITIONS} )
15+
set(ads_example_LIBS ${ads_example_LIBS} ${Qt5Gui_LIBRARIES})
16+
set(ads_example_INCLUDE ${ads_example_INCLUDE} ${Qt5Gui_INCLUDE_DIRS})
17+
set(ads_example_COMPILE_DEFINE ${ads_example_COMPILE_DEFINE} ${Qt5Gui_COMPILE_DEFINITIONS})
18+
set(ads_example_LIBS ${ads_example_LIBS} ${Qt5Widgets_LIBRARIES})
19+
set(ads_example_INCLUDE ${ads_example_INCLUDE} ${Qt5Widgets_INCLUDE_DIRS})
20+
set(ads_example_COMPILE_DEFINE ${ads_example_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS})
21+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
22+
set(ads_example_SRCS
23+
main.cpp
24+
MainWindow.cpp
25+
MainWindow.ui
26+
)
27+
add_executable(ads_example WIN32 ${ads_example_SRCS})
28+
if(BUILD_STATIC)
29+
set(ads_example_DEFINE ${ads_example_DEFINE} ADS_STATIC)
30+
endif()
31+
add_dependencies(ads_example ads)
32+
target_include_directories(ads_example PUBLIC
33+
$<BUILD_INTERFACE:${ads_example_INCLUDE}>
34+
$<INSTALL_INTERFACE:include>
35+
)
36+
target_include_directories(ads_example PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ${ads_example_INCLUDE})
37+
target_link_libraries(ads_example PRIVATE ads ${ads_example_LIBS})
38+
target_compile_definitions(ads_example PRIVATE ${ads_example_DEFINE})
39+
set_target_properties(ads_example PROPERTIES
40+
VERSION "1.0"
41+
SOVERSION 1
42+
EXPORT_NAME "Qt Advanced Docking System Example"
43+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/example"
44+
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/example"
45+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin/example"
46+
)

src/ads_globals.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,15 @@
3535
#include <QPixmap>
3636
#include <QWidget>
3737

38+
#ifndef ADS_STATIC
3839
#ifdef ADS_SHARED_EXPORT
3940
#define ADS_EXPORT Q_DECL_EXPORT
4041
#else
4142
#define ADS_EXPORT Q_DECL_IMPORT
4243
#endif
44+
#else
45+
#define ADS_EXPORT
46+
#endif
4347

4448
#define ADS_DEBUG_LEVEL 0
4549

0 commit comments

Comments
 (0)