У меня есть один вопрос, это правильная структура приложения? Я начинаю с 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}
)
Не существует «правильного» способа сделать это. Единственное правило — делайте все, что вам проще всего поддерживать. Ваша структура каталогов выглядит найти из того небольшого количества информации, которую вы дали.
Если вы обнаружите, что структура каталогов, которую вы используете, причиняет вам боль или затрудняет организацию, вы всегда можете перемешать файлы.
Других решений пока нет …