add basic c++ project setup

This commit is contained in:
2026-04-19 10:19:27 +02:00
parent 1e1f2d7816
commit 8b740dfe8e
36 changed files with 16842 additions and 0 deletions

176
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1,176 @@
set(TARGET_BASE_NAME "DotaFactory")
set(TARGET_APP_NAME "${TARGET_BASE_NAME}")
set(TARGET_LIB_NAME "${TARGET_BASE_NAME}_lib")
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(HEADER_SEARCH_PATHS ${TARGET_LIB_HEADER_SEARCH_PATHS} ${HEADER_SEARCH_PATHS})
set (SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
# Lib ------------------------------------------------------------
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)
foreach (_file ${HDRS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_HDRS "${_relPath}")
endforeach()
SET(RELATIVE_SRCS)
foreach (_file ${SRCS})
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_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}"
)
# 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(LINK_LIBRARIES ${LINK_LIBRARIES} ${TARGET_LIB_NAME})
# App ------------------------------------------------------------
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)
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 )
add_subdirectory(app)
SET(RELATIVE_HDRS)
foreach (_file ${HDRS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_HDRS "${_relPath}")
endforeach()
SET(RELATIVE_SRCS)
foreach (_file ${SRCS})
file (RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
list (APPEND RELATIVE_SRCS "${_relPath}")
endforeach()
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}"
)
target_include_directories(${TARGET_APP_NAME} SYSTEM
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}"
)
target_link_libraries(${TARGET_APP_NAME} ${LINK_LIBRARIES})
# Test ------------------------------------------------------------
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}"
)
target_include_directories(${TARGET_TEST_NAME} SYSTEM
PUBLIC "${SYSTEM_HEADER_SEARCH_PATHS}"
)
target_link_libraries(${TARGET_TEST_NAME} ${LINK_LIBRARIES})
# Export ------------------------------------------------------------
set(TARGET_LIB_NAME "${TARGET_LIB_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)