2013-02-23 34 views
-1

我有一個問題是這個正確的應用程序結構?我從C++和CMake開始,我想以正確的方式開始。它是正確的C++應用程序結構?

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

根\的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) 

根的\ 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} 
) 

根的\ src \應用

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} 
) 
+3

正確的應用程序結構確實做*什麼*? – 2013-02-23 18:20:06

+0

好的,對不起,定義不好。我認爲易於維護(添加新組件,庫等)。 – user1607808 2013-02-23 18:25:11

回答

2

沒有「正確'的方式來做到這一點。唯一的規則就是盡一切可能讓你最容易維護。您的目錄結構看起來是從您提供的少量信息中找到的。

如果您發現您正在使用的目錄結構導致您感到痛苦或難以保持組織性,您可以隨時對文件進行洗牌。

+0

謝謝你,求助。 – user1607808 2013-02-23 19:36:55