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}
)
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.