CMakeLists.txt

changeset 259
c27612f0eac0
parent 256
c6f5de03dc0f
child 263
59b6027b9843
equal deleted inserted replaced
258:fe094d0687ad 259:c27612f0eac0
1 project(ldforge) 1 project(ldforge)
2 cmake_minimum_required(VERSION 2.8.12) 2 cmake_minimum_required(VERSION 2.8.12)
3 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake") 3 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake")
4 #include(cotire)
5 set(OpenGL_GL_PREFERENCE GLVND) 4 set(OpenGL_GL_PREFERENCE GLVND)
6 find_package(Qt5Widgets REQUIRED) 5 find_package(Qt6 COMPONENTS Core Widgets OpenGL UiPlugin OpenGLWidgets)
7 if (Qt5Widgets_VERSION VERSION_LESS 5.5.0) 6 if (Qt6_FOUND)
8 message(FATAL_ERROR "Qt5 version 5.5 required") 7 message(NOTICE "-- Using Qt6")
8 find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
9 # Unfortunately "Qt::UiPlugin" doesn't seem to work so let's resolve
10 # it here instead...
11 add_library(QtUiPlugin ALIAS Qt6::UiPlugin)
12 else()
13 message(NOTICE "-- Qt6 not found, using Qt5 instead")
14 find_package(Qt5 5.5 REQUIRED COMPONENTS Core Widgets OpenGL UiPlugin)
15 add_library(QtUiPlugin ALIAS Qt5::UiPlugin)
9 endif() 16 endif()
10 find_package(Qt5Core REQUIRED) 17 find_package(OpenGL REQUIRED)
11 find_package(Qt5OpenGL REQUIRED)
12 find_package(Qt5Network REQUIRED)
13 #find_package(Qt5LinguistTools REQUIRED)
14 find_package(GLM REQUIRED) 18 find_package(GLM REQUIRED)
15 set(CMAKE_AUTOMOC ON) 19 set(CMAKE_AUTOMOC ON)
16 set(CMAKE_AUTOUIC ON) 20 set(CMAKE_AUTOUIC ON)
17 set(CMAKE_AUTORCC ON) 21 set(CMAKE_AUTORCC ON)
18 find_package(OpenGL REQUIRED) 22 include_directories(${CMAKE_CURRENT_BINARY_DIR})
19 include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
20 include_directories(${GLM_INCLUDE_DIR}) 23 include_directories(${GLM_INCLUDE_DIR})
21 add_definitions(-DQT_NO_KEYWORDS) 24 add_definitions(-DQT_NO_KEYWORDS)
22 source_group("LDForge" REGULAR_EXPRESSION "src/.+\\.(cpp|h|ui)") 25 source_group("LDForge" REGULAR_EXPRESSION "src/.+\\.(cpp|h|ui)")
23 add_subdirectory(widgets) 26 add_subdirectory(widgets)
24 27
118 set(CMAKE_CXX_EXTENSIONS OFF) 121 set(CMAKE_CXX_EXTENSIONS OFF)
119 include_directories("${PROJECT_BINARY_DIR}") 122 include_directories("${PROJECT_BINARY_DIR}")
120 include_directories("${PROJECT_BINARY_DIR}/src") 123 include_directories("${PROJECT_BINARY_DIR}/src")
121 include_directories("${PROJECT_SOURCE_DIR}") 124 include_directories("${PROJECT_SOURCE_DIR}")
122 include_directories("${PROJECT_SOURCE_DIR}/src") 125 include_directories("${PROJECT_SOURCE_DIR}/src")
123
124 # Translations
125 #qt5_create_translation(QM_FILES ${LDFORGE_SOURCES} ${LDFORGE_HEADERS} ${LDFORGE_FORMS} ${LDFORGE_LOCALES})
126 #add_custom_target(translations ALL DEPENDS ${QM_FILES})
127 add_custom_target(resources ALL DEPENDS ${LDFORGE_RESOURCES}) 126 add_custom_target(resources ALL DEPENDS ${LDFORGE_RESOURCES})
128 127
129 if (NOT MSVC) 128 if (NOT MSVC)
130 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") 129 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
131 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG") 130 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG")
132 endif() 131 endif()
133 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wunused") 132 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wunused")
134 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-implicit-fallthrough") 133 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-implicit-fallthrough")
135 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type") 134 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type")
136 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-nonliteral -Wnonnull -Wnonnull-compare -Wnull-dereference -Winfinite-recursion -Wunused-const-variable=1 -Wuninitialized -Wsuggest-attribute=noreturn -Wmissing-noreturn -Wsuggest-attribute=malloc") 135 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-nonliteral -Wnonnull -Wnull-dereference -Winfinite-recursion -Wuninitialized -Wmissing-noreturn")
137 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wduplicated-branches -Wshadow") 136 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
138 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunsafe-loop-optimizations -Wundef -Wmissing-field-initializers") 137 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wundef -Wmissing-field-initializers")
139 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wcast-function-type -Wconversion") 138 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wcast-function-type -Wconversion")
140 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-declarations -Wdate-time") 139 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-declarations -Wdate-time")
141 endif() 140 endif()
142 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") 141 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcovered-switch-default -Wextra-semi -Wgnu -Wmicrosoft") 142 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcovered-switch-default -Wextra-semi -Wgnu -Wmicrosoft")
144 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wsometimes-uninitialized -Wstring-concatenation -Wstring-conversion -Wsuggest-override") 143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wsometimes-uninitialized -Wstring-concatenation -Wstring-conversion -Wsuggest-override")
145 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override -Wundefined-func-template -Wundefined-reinterpret-cast") 144 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override -Wundefined-func-template -Wundefined-reinterpret-cast")
146 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized-const-reference -Wunreachable-code -Wunreachable-code-break -Wunreachable-code-return") 145 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized-const-reference -Wunreachable-code -Wunreachable-code-break -Wunreachable-code-return")
147 endif() 146 endif()
148 qt5_add_resources(LDFORGE_QRC ${LDFORGE_RESOURCES}) 147 qt_add_resources(LDFORGE_QRC ${LDFORGE_RESOURCES})
149 qt5_wrap_ui(LDFORGE_FORMS_HEADERS ${LDFORGE_FORMS}) 148 qt_wrap_ui(LDFORGE_FORMS_HEADERS ${LDFORGE_FORMS})
150
151 # Move languages.qrc into the build directory to bake the .qm-files into LDForge
152 # so that they don't have to be shipped separately
153 # https://stackoverflow.com/a/34798124
154 # https://gist.github.com/giraldeau/546ba5512a74dfe9d8ea0862d66db412
155 set(LANGUAGES_QRC "languages.qrc")
156 configure_file(${LANGUAGES_QRC} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
157 qt5_add_resources(LDFORGE_QM_RC_FILE ${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_QRC})
158 set_source_files_properties(${LDFORGE_LOCALES} PROPERTIES HEADER_FILE_ONLY TRUE)
159 149
160 add_executable(ldforge WIN32 150 add_executable(ldforge WIN32
161 ${LDFORGE_SOURCES} 151 ${LDFORGE_SOURCES}
162 ${LDFORGE_HEADERS} 152 ${LDFORGE_HEADERS}
163 ${LDFORGE_RESOURCES} 153 ${LDFORGE_RESOURCES}
164 ${LDFORGE_QRC} 154 ${LDFORGE_QRC}
165 #${LDFORGE_QM_RC_FILE}
166 ${QM_FILES}
167 ${LDFORGE_FORMS_HEADERS} 155 ${LDFORGE_FORMS_HEADERS}
168 ${LDFORGE_OTHER_FILES} 156 ${LDFORGE_OTHER_FILES}
169 ) 157 )
170 158
171 set_source_files_properties(${LDFORGE_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE) 159 set_source_files_properties(${LDFORGE_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE)
172 set_source_files_properties(${LDFORGE_RESOURCES} PROPERTIES HEADER_FILE_ONLY TRUE) 160 set_source_files_properties(${LDFORGE_RESOURCES} PROPERTIES HEADER_FILE_ONLY TRUE)
173 set_source_files_properties(${LDFORGE_OTHER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) 161 set_source_files_properties(${LDFORGE_OTHER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
174 set_target_properties(ldforge PROPERTIES AUTOMOC 1) 162 set_target_properties(ldforge PROPERTIES AUTOMOC 1)
175 target_link_libraries(ldforge Qt5::Widgets Qt5::Network Qt5::OpenGL ${OPENGL_LIBRARIES}) 163 target_link_libraries(ldforge PRIVATE Qt::Core)
176 target_link_libraries(ldforge ldforgewidgets) 164 target_link_libraries(ldforge PRIVATE Qt::Widgets)
165 target_link_libraries(ldforge PRIVATE Qt::OpenGL)
166 target_link_libraries(ldforge PRIVATE ${OPENGL_LIBRARIES})
167 target_link_libraries(ldforge PRIVATE ${GLEW_LIBRARIES})
168 target_link_libraries(ldforge PRIVATE ldforgewidgets)
177 add_dependencies(ldforge resources) 169 add_dependencies(ldforge resources)
178 #cotire(ldforge) 170 if (Qt6_FOUND)
171 target_link_libraries(ldforge PRIVATE Qt6::Core5Compat)
172 target_link_libraries(ldforge PRIVATE Qt6::OpenGLWidgets)
173 endif()
179 174
180 add_custom_target(linelength ALL 175 add_custom_target(linelength ALL
181 COMMAND python3 176 COMMAND python3
182 "${CMAKE_SOURCE_DIR}/tools/linelength.py" 177 "${CMAKE_SOURCE_DIR}/tools/linelength.py"
183 ${LDFORGE_SOURCES} 178 ${LDFORGE_SOURCES}

mercurial