add basic c++ project setup
This commit is contained in:
176
src/CMakeLists.txt
Normal file
176
src/CMakeLists.txt
Normal 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)
|
||||
Reference in New Issue
Block a user