add ui target
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
cmake_minimum_required(VERSION 3.14.4)
|
||||
|
||||
message(STATUS "Using CMake ${CMAKE_VERSION}")
|
||||
|
||||
@@ -61,9 +61,5 @@ endfunction(COPY_QT_BINARIES)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@@ -2,175 +2,178 @@ set(TARGET_BASE_NAME "DotaFactory")
|
||||
|
||||
set(TARGET_APP_NAME "${TARGET_BASE_NAME}")
|
||||
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_LIB_HEADER_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/lib" "${CMAKE_CURRENT_SOURCE_DIR}/external")
|
||||
set(TARGET_TEST_HEADER_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/test")
|
||||
set(TARGET_LIB_INCLUDE_DIRS
|
||||
"${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(SRCS)
|
||||
SET(LIB_INCLUDE_PATH)
|
||||
set(HDRS)
|
||||
set(SRCS)
|
||||
set(LIB_INCLUDE_PATH)
|
||||
|
||||
add_subdirectory(external)
|
||||
add_subdirectory(lib)
|
||||
|
||||
set_source_files_properties(${EXTERNAL_FILES} PROPERTIES COMPILE_FLAGS "-w")
|
||||
|
||||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
# Instruct CMake to run moc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
||||
SET(RELATIVE_HDRS)
|
||||
set(RELATIVE_HDRS)
|
||||
foreach (_file ${HDRS})
|
||||
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list (APPEND RELATIVE_HDRS "${_relPath}")
|
||||
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list(APPEND RELATIVE_HDRS "${_relPath}")
|
||||
endforeach()
|
||||
|
||||
SET(RELATIVE_SRCS)
|
||||
set(RELATIVE_SRCS)
|
||||
foreach (_file ${SRCS})
|
||||
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list (APPEND RELATIVE_SRCS "${_relPath}")
|
||||
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list(APPEND RELATIVE_SRCS "${_relPath}")
|
||||
endforeach()
|
||||
|
||||
add_files(
|
||||
LIB_FILES
|
||||
${RELATIVE_HDRS}
|
||||
${RELATIVE_SRCS}
|
||||
)
|
||||
|
||||
set(HEADER_SEARCH_PATHS ${LIB_INCLUDE_PATH} ${HEADER_SEARCH_PATHS})
|
||||
add_files(LIB_FILES ${RELATIVE_HDRS} ${RELATIVE_SRCS})
|
||||
|
||||
add_library(${TARGET_LIB_NAME} ${LIB_FILES} ${EXTERNAL_FILES})
|
||||
|
||||
create_source_groups(${LIB_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 INCLUDE_DIRECTORIES "${HEADER_SEARCH_PATHS}"
|
||||
set_property(TARGET ${TARGET_LIB_NAME} PROPERTY INCLUDE_DIRECTORIES
|
||||
"${TARGET_LIB_INCLUDE_DIRS}"
|
||||
"${LIB_INCLUDE_PATH}"
|
||||
)
|
||||
|
||||
# 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})
|
||||
target_link_libraries(${TARGET_LIB_NAME} Qt5::Core)
|
||||
|
||||
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}")
|
||||
|
||||
if (WIN32)
|
||||
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Debug/app/" True)
|
||||
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Release/app/" False)
|
||||
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Debug/app/" True)
|
||||
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Release/app/" False)
|
||||
|
||||
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
|
||||
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_OUTPUT_ROOT_PATH ${OUTPUT_ROOT_PATH})
|
||||
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}\\Release\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit
|
||||
)
|
||||
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
|
||||
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_OUTPUT_ROOT_PATH ${OUTPUT_ROOT_PATH})
|
||||
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}\\Release\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit
|
||||
)
|
||||
endif ()
|
||||
|
||||
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
|
||||
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
|
||||
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${OUTPUT_ROOT_PATH}/${OUTPUTCONFIG}/app/")
|
||||
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
|
||||
|
||||
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
||||
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${OUTPUT_ROOT_PATH}/${OUTPUTCONFIG}/app/")
|
||||
endforeach ()
|
||||
|
||||
set(HDRS)
|
||||
set(SRCS)
|
||||
|
||||
add_subdirectory(app)
|
||||
|
||||
SET(RELATIVE_HDRS)
|
||||
set(RELATIVE_HDRS)
|
||||
foreach (_file ${HDRS})
|
||||
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list (APPEND RELATIVE_HDRS "${_relPath}")
|
||||
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list(APPEND RELATIVE_HDRS "${_relPath}")
|
||||
endforeach()
|
||||
|
||||
SET(RELATIVE_SRCS)
|
||||
set(RELATIVE_SRCS)
|
||||
foreach (_file ${SRCS})
|
||||
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list (APPEND RELATIVE_SRCS "${_relPath}")
|
||||
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
||||
list(APPEND RELATIVE_SRCS "${_relPath}")
|
||||
endforeach()
|
||||
|
||||
add_files(
|
||||
APP_FILES
|
||||
${RELATIVE_HDRS}
|
||||
${RELATIVE_SRCS}
|
||||
)
|
||||
|
||||
add_files(APP_FILES ${RELATIVE_HDRS} ${RELATIVE_SRCS})
|
||||
|
||||
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})
|
||||
|
||||
set_property(TARGET ${TARGET_APP_NAME} PROPERTY CXX_STANDARD 17)
|
||||
|
||||
set_property(
|
||||
TARGET ${TARGET_APP_NAME} PROPERTY INCLUDE_DIRECTORIES
|
||||
"${TARGET_APP_HEADER_SEARCH_PATHS}"
|
||||
"${HEADER_SEARCH_PATHS}"
|
||||
set_target_properties(${TARGET_APP_NAME} PROPERTIES
|
||||
VS_DEBUGGER_WORKING_DIRECTORY "${OUTPUT_ROOT_PATH}/$(Configuration)/app/"
|
||||
)
|
||||
target_link_libraries(${TARGET_APP_NAME} ${TARGET_UI_NAME})
|
||||
|
||||
target_include_directories(${TARGET_APP_NAME} SYSTEM
|
||||
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}"
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET_APP_NAME} ${LINK_LIBRARIES})
|
||||
unset(APP_FILES)
|
||||
unset(RELATIVE_HDRS)
|
||||
unset(RELATIVE_SRCS)
|
||||
unset(HDRS)
|
||||
unset(SRCS)
|
||||
|
||||
|
||||
# Test ------------------------------------------------------------
|
||||
# ============================================================
|
||||
# tests — Catch2 tests; links against lib only (no QtWidgets)
|
||||
# ============================================================
|
||||
|
||||
add_subdirectory(test)
|
||||
|
||||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
add_executable(${TARGET_TEST_NAME} ${TEST_FILES})
|
||||
|
||||
create_source_groups(${TEST_FILES})
|
||||
|
||||
set_property(TARGET ${TARGET_TEST_NAME} PROPERTY CXX_STANDARD 17)
|
||||
|
||||
set_property(
|
||||
TARGET ${TARGET_TEST_NAME} PROPERTY INCLUDE_DIRECTORIES
|
||||
"${TARGET_TEST_HEADER_SEARCH_PATHS}"
|
||||
"${HEADER_SEARCH_PATHS}"
|
||||
set_property(TARGET ${TARGET_TEST_NAME} PROPERTY INCLUDE_DIRECTORIES
|
||||
"${TARGET_TEST_INCLUDE_DIRS}"
|
||||
"${TARGET_LIB_INCLUDE_DIRS}"
|
||||
)
|
||||
|
||||
target_include_directories(${TARGET_TEST_NAME} SYSTEM
|
||||
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}"
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET_TEST_NAME} ${LINK_LIBRARIES})
|
||||
target_link_libraries(${TARGET_TEST_NAME} ${TARGET_LIB_NAME})
|
||||
|
||||
|
||||
# Export ------------------------------------------------------------
|
||||
# ============================================================
|
||||
# Export
|
||||
# ============================================================
|
||||
|
||||
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(HEADER_SEARCH_PATHS ${HEADER_SEARCH_PATHS} PARENT_SCOPE)
|
||||
set(LINK_LIBRARIES ${LINK_LIBRARIES} PARENT_SCOPE)
|
||||
|
||||
7
src/ui/CMakeLists.txt
Normal file
7
src/ui/CMakeLists.txt
Normal 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).
|
||||
Reference in New Issue
Block a user