Is it right C++ app structure?

262 views Asked by At

I have one question is this right app structure? I´m beginning with C++ and CMake and I want to begin in right way.

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

There are 1 answers

0
Alex On BEST ANSWER

There is no 'right' way to do it. The only rule is do whatever makes it easiest for you to maintain. Your directory structure looks find from what little information you've given.

If you find that the directory structure you're using is causing you pain or making things hard to keep organized, you can always shuffle the files around.