add ui target

This commit is contained in:
2026-04-19 13:40:37 +02:00
parent 8b740dfe8e
commit f5a999d20a
3 changed files with 110 additions and 104 deletions

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.1) cmake_minimum_required(VERSION 3.14.4)
message(STATUS "Using CMake ${CMAKE_VERSION}") message(STATUS "Using CMake ${CMAKE_VERSION}")
@@ -61,9 +61,5 @@ endfunction(COPY_QT_BINARIES)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
set(HEADER_SEARCH_PATHS)
set(SYSTEM_HEADER_SEARCH_PATHS)
set(LINK_LIBRARIES ${Boost_LIBRARIES} Qt5::Widgets Qt5::Network Qt5::Multimedia Qt5::Charts ${OPENGL_LIBRARIES})
add_subdirectory(src) add_subdirectory(src)

View File

@@ -2,175 +2,178 @@ set(TARGET_BASE_NAME "DotaFactory")
set(TARGET_APP_NAME "${TARGET_BASE_NAME}") set(TARGET_APP_NAME "${TARGET_BASE_NAME}")
set(TARGET_LIB_NAME "${TARGET_BASE_NAME}_lib") set(TARGET_LIB_NAME "${TARGET_BASE_NAME}_lib")
set(TARGET_UI_NAME "${TARGET_BASE_NAME}_ui")
set(TARGET_TEST_NAME "${TARGET_BASE_NAME}_test") set(TARGET_TEST_NAME "${TARGET_BASE_NAME}_test")
set(TARGET_LIB_HEADER_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/lib" "${CMAKE_CURRENT_SOURCE_DIR}/external") set(TARGET_LIB_INCLUDE_DIRS
set(TARGET_TEST_HEADER_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/test") "${CMAKE_CURRENT_SOURCE_DIR}/lib"
"${CMAKE_CURRENT_SOURCE_DIR}/external"
)
set(TARGET_UI_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/ui")
set(TARGET_TEST_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/test")
set(HEADER_SEARCH_PATHS ${TARGET_LIB_HEADER_SEARCH_PATHS} ${HEADER_SEARCH_PATHS}) set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set (SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
# Lib ------------------------------------------------------------ # ============================================================
# lib — simulation + config
# Depends on Qt Core, toml++, tinyexpr only (no QtWidgets).
# ============================================================
SET(HDRS) set(HDRS)
SET(SRCS) set(SRCS)
SET(LIB_INCLUDE_PATH) set(LIB_INCLUDE_PATH)
add_subdirectory(external) add_subdirectory(external)
add_subdirectory(lib) add_subdirectory(lib)
set_source_files_properties(${EXTERNAL_FILES} PROPERTIES COMPILE_FLAGS "-w") set_source_files_properties(${EXTERNAL_FILES} PROPERTIES COMPILE_FLAGS "-w")
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(RELATIVE_HDRS)
SET(RELATIVE_HDRS)
foreach (_file ${HDRS}) foreach (_file ${HDRS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}") file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_HDRS "${_relPath}") list(APPEND RELATIVE_HDRS "${_relPath}")
endforeach() endforeach()
SET(RELATIVE_SRCS) set(RELATIVE_SRCS)
foreach (_file ${SRCS}) foreach (_file ${SRCS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}") file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_SRCS "${_relPath}") list(APPEND RELATIVE_SRCS "${_relPath}")
endforeach() endforeach()
add_files( add_files(LIB_FILES ${RELATIVE_HDRS} ${RELATIVE_SRCS})
LIB_FILES
${RELATIVE_HDRS}
${RELATIVE_SRCS}
)
set(HEADER_SEARCH_PATHS ${LIB_INCLUDE_PATH} ${HEADER_SEARCH_PATHS})
add_library(${TARGET_LIB_NAME} ${LIB_FILES} ${EXTERNAL_FILES}) add_library(${TARGET_LIB_NAME} ${LIB_FILES} ${EXTERNAL_FILES})
create_source_groups(${LIB_FILES}) create_source_groups(${LIB_FILES})
create_source_groups(${EXTERNAL_FILES}) create_source_groups(${EXTERNAL_FILES})
UNSET(LIB_FILES)
UNSET(RELATIVE_HDRS)
UNSET(RELATIVE_SRCS)
set_property(TARGET ${TARGET_LIB_NAME} PROPERTY CXX_STANDARD 17) set_property(TARGET ${TARGET_LIB_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${TARGET_LIB_NAME} PROPERTY INCLUDE_DIRECTORIES
set_property( "${TARGET_LIB_INCLUDE_DIRS}"
TARGET ${TARGET_LIB_NAME} "${LIB_INCLUDE_PATH}"
PROPERTY INCLUDE_DIRECTORIES "${HEADER_SEARCH_PATHS}"
) )
target_link_libraries(${TARGET_LIB_NAME} Qt5::Core)
# include external header without warnings
target_include_directories(${TARGET_LIB_NAME} SYSTEM
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}"
)
target_link_libraries(${TARGET_LIB_NAME} ${LINK_LIBRARIES})
set(CMAKE_AUTOMOC OFF) set(CMAKE_AUTOMOC OFF)
set(LINK_LIBRARIES ${LINK_LIBRARIES} ${TARGET_LIB_NAME}) unset(LIB_FILES)
unset(RELATIVE_HDRS)
unset(RELATIVE_SRCS)
unset(HDRS)
unset(SRCS)
unset(LIB_INCLUDE_PATH)
# App ------------------------------------------------------------ # ============================================================
# ui — QtWidgets + QOpenGLWidget
# Depends on lib. No sources yet; declared as INTERFACE library.
# When UI source files are added under src/ui/, change this to
# a regular static library and enable AUTOMOC on the target.
# ============================================================
add_subdirectory(ui)
add_library(${TARGET_UI_NAME} INTERFACE)
target_link_libraries(${TARGET_UI_NAME} INTERFACE
${TARGET_LIB_NAME}
Qt5::Widgets
${OPENGL_LIBRARIES}
Qt5::Network
Qt5::Multimedia
Qt5::Charts
)
target_include_directories(${TARGET_UI_NAME} INTERFACE
"${TARGET_UI_INCLUDE_DIRS}"
"${TARGET_LIB_INCLUDE_DIRS}"
)
# ============================================================
# app — thin main(); depends on ui
# ============================================================
set(OUTPUT_ROOT_PATH "${CMAKE_BINARY_DIR}/${TARGET_BASE_NAME}") set(OUTPUT_ROOT_PATH "${CMAKE_BINARY_DIR}/${TARGET_BASE_NAME}")
if (WIN32) if (WIN32)
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Debug/app/" True) COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Debug/app/" True)
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Release/app/" False) COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Release/app/" False)
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_OUTPUT_ROOT_PATH ${OUTPUT_ROOT_PATH}) string(REGEX REPLACE "/" "\\\\" BACKSLASHED_OUTPUT_ROOT_PATH ${OUTPUT_ROOT_PATH})
execute_process( execute_process(
COMMAND "cmd.exe" "/k" "rmdir" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Debug\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Debug\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit COMMAND "cmd.exe" "/k" "rmdir" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Debug\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Debug\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit
COMMAND "cmd.exe" "/k" "rmdir" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit COMMAND "cmd.exe" "/k" "rmdir" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit
) )
endif () endif ()
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${OUTPUT_ROOT_PATH}/${OUTPUTCONFIG}/app/") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${OUTPUT_ROOT_PATH}/${OUTPUTCONFIG}/app/")
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES ) endforeach ()
set(HDRS)
set(SRCS)
add_subdirectory(app) add_subdirectory(app)
SET(RELATIVE_HDRS) set(RELATIVE_HDRS)
foreach (_file ${HDRS}) foreach (_file ${HDRS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}") file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_HDRS "${_relPath}") list(APPEND RELATIVE_HDRS "${_relPath}")
endforeach() endforeach()
SET(RELATIVE_SRCS) set(RELATIVE_SRCS)
foreach (_file ${SRCS}) foreach (_file ${SRCS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}") file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_SRCS "${_relPath}") list(APPEND RELATIVE_SRCS "${_relPath}")
endforeach() endforeach()
add_files( add_files(APP_FILES ${RELATIVE_HDRS} ${RELATIVE_SRCS})
APP_FILES
${RELATIVE_HDRS}
${RELATIVE_SRCS}
)
add_executable(${TARGET_APP_NAME} ${APP_FILES}) add_executable(${TARGET_APP_NAME} ${APP_FILES})
set_target_properties(${TARGET_APP_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${OUTPUT_ROOT_PATH}/$(Configuration)/app/")
create_source_groups(${APP_FILES}) create_source_groups(${APP_FILES})
set_property(TARGET ${TARGET_APP_NAME} PROPERTY CXX_STANDARD 17) set_property(TARGET ${TARGET_APP_NAME} PROPERTY CXX_STANDARD 17)
set_target_properties(${TARGET_APP_NAME} PROPERTIES
set_property( VS_DEBUGGER_WORKING_DIRECTORY "${OUTPUT_ROOT_PATH}/$(Configuration)/app/"
TARGET ${TARGET_APP_NAME} PROPERTY INCLUDE_DIRECTORIES
"${TARGET_APP_HEADER_SEARCH_PATHS}"
"${HEADER_SEARCH_PATHS}"
) )
target_link_libraries(${TARGET_APP_NAME} ${TARGET_UI_NAME})
target_include_directories(${TARGET_APP_NAME} SYSTEM unset(APP_FILES)
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}" unset(RELATIVE_HDRS)
) unset(RELATIVE_SRCS)
unset(HDRS)
target_link_libraries(${TARGET_APP_NAME} ${LINK_LIBRARIES}) unset(SRCS)
# Test ------------------------------------------------------------ # ============================================================
# tests — Catch2 tests; links against lib only (no QtWidgets)
# ============================================================
add_subdirectory(test) add_subdirectory(test)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${TARGET_TEST_NAME} ${TEST_FILES}) add_executable(${TARGET_TEST_NAME} ${TEST_FILES})
create_source_groups(${TEST_FILES}) create_source_groups(${TEST_FILES})
set_property(TARGET ${TARGET_TEST_NAME} PROPERTY CXX_STANDARD 17) set_property(TARGET ${TARGET_TEST_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${TARGET_TEST_NAME} PROPERTY INCLUDE_DIRECTORIES
set_property( "${TARGET_TEST_INCLUDE_DIRS}"
TARGET ${TARGET_TEST_NAME} PROPERTY INCLUDE_DIRECTORIES "${TARGET_LIB_INCLUDE_DIRS}"
"${TARGET_TEST_HEADER_SEARCH_PATHS}"
"${HEADER_SEARCH_PATHS}"
) )
target_link_libraries(${TARGET_TEST_NAME} ${TARGET_LIB_NAME})
target_include_directories(${TARGET_TEST_NAME} SYSTEM
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}"
)
target_link_libraries(${TARGET_TEST_NAME} ${LINK_LIBRARIES})
# Export ------------------------------------------------------------ # ============================================================
# Export
# ============================================================
set(TARGET_LIB_NAME "${TARGET_LIB_NAME}" PARENT_SCOPE) set(TARGET_LIB_NAME "${TARGET_LIB_NAME}" PARENT_SCOPE)
set(TARGET_UI_NAME "${TARGET_UI_NAME}" PARENT_SCOPE)
set(TARGET_APP_NAME "${TARGET_APP_NAME}" PARENT_SCOPE) set(TARGET_APP_NAME "${TARGET_APP_NAME}" PARENT_SCOPE)
set(HEADER_SEARCH_PATHS ${HEADER_SEARCH_PATHS} PARENT_SCOPE)
set(LINK_LIBRARIES ${LINK_LIBRARIES} PARENT_SCOPE)

7
src/ui/CMakeLists.txt Normal file
View File

@@ -0,0 +1,7 @@
# UI source files are listed here as they are added.
# Append headers and sources to HDRS and SRCS in PARENT_SCOPE,
# following the same pattern used by src/lib/.
#
# When this directory has actual sources, the parent CMakeLists.txt
# must be updated to convert DotaFactory_ui from an INTERFACE library
# to a regular static library (and enable AUTOMOC on it).