Это правильная структура приложения C ++?

У меня есть один вопрос, это правильная структура приложения? Я начинаю с C ++ и CMake и хочу начать правильно.

Root
|--build
|--src
|   |-Application
|   |    |-------App.cpp
|   |    |-------App.h
|   |    |-------CMakeLists.txt
|   |-Logger
|   |    |--Some files
|   |    |--CMakeLists
|   |-CMakeLists.txt
|   |-main.cpp
|--CMakeLists.txt

Root \ CMakeLists.txt

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
# set (CMAKE_VERBOSE_MAKEFILE ON)

set (APP_NAME "sdl-example")

project (${APP_NAME})

# ///////////////////////
# /// Check build dir ///
# ///////////////////////

set (Build_Dir_OK "TRUE")
string (REGEX MATCH "^${CMAKE_SOURCE_DIR}" In_Sub_Dir ${CMAKE_BINARY_DIR})
if (In_Sub_Dir)
string (REGEX MATCH "^${CMAKE_SOURCE_DIR}/build" In_Build_Dir ${CMAKE_BINARY_DIR})
if (NOT In_Build_Dir)
set (Build_Dir_OK "FALSE")
endif ()
endif ()

if (NOT Build_Dir_OK)
message (FATAL_ERROR "You must run cmake from a directory that is not in your source tree, or that is in a special subdirectory of the tree whose name begins with ‘build’.")
endif ()# ///////////////////////////
# /// Initializing OpenGL ///
# ///////////////////////////

find_package(OpenGL)
if (NOT OPENGL_FOUND)
message (FATAL_ERROR "OpenGL not found")
else (NOT OPENGL_FOUND)
message ("OpenGL correctly found")
endif (NOT OPENGL_FOUND)

include_directories(
${OPENGL_INCLUDE_DIRS}
${INCLUDE_DIRECTORIES}
)

# ////////////////////////
# /// Initializing SDL ///
# ////////////////////////

find_package(SDL)
if (NOT SDL_FOUND)
message (FATAL_ERROR "SDL not found!")
else (NOT SDL_FOUND)
message ("SDL correctly found")
endif (NOT SDL_FOUND)

include_directories(
${SDL_INCLUDE_DIR}
${INCLUDE_DIRECTORIES}
)

set (LIBRARIES ${OPENGL_LIBRARIES} ${SDL_LIBRARY})

add_subdirectory(src)

Root \ SRC \ CMakeLists.txt

if (APP_NAME STREQUAL "")
message (FATAL_ERROR "You must set the COMPONENT_NAME variable!")
endif ()

message ("Preparing application: " ${APP_NAME})

file (GLOB SRCS ./*.c ./*.cpp)
file (GLOB HDRS ./*.h ./*.hpp)

include_directories (${CMAKE_CURRENT_SOURCE_DIR})

# /////////////////////////
# /// Adding executable ///
# /////////////////////////

add_executable (
${APP_NAME}
${SRCS}
${HDRS}
)

set (COMPONENT_NAME "application")
set (COMPONENTS ${COMPONENTS} ${COMPONENT_NAME})
add_subdirectory("Application")

target_link_libraries(
${APP_NAME}
${LIBRARIES}
${COMPONENTS}
${TARGET_LINK_LIBRARIES}
)

Root \ SRC \ Application

if (COMPONENT_NAME STREQUAL "")
message (FATAL_ERROR "You must set the COMPONENT_NAME variable!")
endif ()

message ("Preparing component:" ${COMPONENT_NAME})

file (GLOB SRCS ./*.c ./*.cpp)
file (GLOB HDRS ./*.h ./*.hpp)

add_library(
${COMPONENT_NAME}
${SRCS}
${HDRS}
)

target_link_libraries (
${COMPONENT_NAME}
${LIBRARIES}
${SDL_LIBRARY}
)

-1

Решение

Не существует «правильного» способа сделать это. Единственное правило — делайте все, что вам проще всего поддерживать. Ваша структура каталогов выглядит найти из того небольшого количества информации, которую вы дали.

Если вы обнаружите, что структура каталогов, которую вы используете, причиняет вам боль или затрудняет организацию, вы всегда можете перемешать файлы.

2

Другие решения

Других решений пока нет …