CMake 项目管理

CMake进行复杂工程管理与目录结构设计

  1. 项目目录结构如下:
    1. SEED:总项目
    2. SEED_BP: 项目公共依赖库
    3. SEED_SERVER:业务后台服务
    4. SEEDOTHER:其他后台服务
    5. SEEDOUT:项目输出目录已经依赖目录

      2.目录结构图

项目文件结构图

       3.CMakeList.txt编写

          3.1.工程总配置

# ./SEED/CMakeLists.txt,工程总配置文件

# 最低版本要求,必须
cmake_minimum_required(VERSION 3.0)

# 工程名称,这里用SEED这个名字
project(SEED)

# 添加include目录,本例公共头文件在SEED/SEEDBP/include目录下,所以直接取${PROJECT_SOURCE_DIR}/SEEDBP/include

set(SEED_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/SEEDBP/include)

include_directories(SEED_INCLUDE_DIR)


# 添加链接库查找目录,注:库查找序按照参数顺序从左向右查
set(SEED_LIB_DIR1 ${PROJECT_SOURCE_DIR}/SEEDOUT/lib)
set(SEED_LIB_DIR2 ${PROJECT_SOURCE_DIR}/SEEDOUT/lib2)
link_directories(${SEED_LIB_DIR} ${SEED_LIB_DIR2} /usr/local/libs /usr/lib)

# 设置生成的库文件目录,项目的成库目录和依赖库lib目录相同(/SEED/SEEDOUT/lib)
set(LIBRARY_OUTPUT_PATH ${SEED_LIB_DIR1})

# 设置可执行文件目录,项目的成库目录和依赖库bin目录相同(/SEED/SEEDOUT/bin)
set(SEED_BIN_DIR ${PROJECT_SOURCE_DIR}/SEEDOUT/bin)
set(EXECUTABLE_OUTPUT_PATH ${SEED_BIN_DIR})

# 添加子目录(每个子目录下都必须有自已的CMakeLists.txt文件)
set(SEED_BP ${PROJECT_SOURCE_DIR}/SEEDBP)
add_subdirectory(SEED_BP)

set(SEED_SERVER ${PROJECT_SOURCE_DIR}/SEEDSERVER)
add_subdirectory(SEED_SERVER)

set(SEED_OTHER ${PROJECT_SOURCE_DIR}/SEEDOTHER)
add_subdirectory(SEED_OTHER)



    3.2SEEDBP工程配置

# ./SEED/SEEDBP/CMakeLists.txt,SEEDBP(基础库)子工程配置文件

# 工程名称,这里用SEED这个名字
project(SEEDBP)

#设置子项目路径

set(SEED_BP_DIR ${PROJECT_SOURCE_DIR}/SEEDBP)

# 添加子目录(每个子目录下都必须有自已的CMakeLists.txt文件)
set(SEED_BP ${SEED_BP_DIR}/SEEDCURL)
add_subdirectory(SEED_BP)

set(SEED_SERVER ${SEED_BP_DIR}/SEEDETCD)
add_subdirectory(SEED_SERVER)

 3.2.1 SEEDETCD 和 SEEDCURL工程配置

# ./SEED/SEEDBP/SEEDETCD/CMakeLists.txt SEEDETCD(基础库)具体工程配置文件

# 工程名称,这里用SEED这个名字
project(SEEDETCD)

#设置子项目内部头文件路径
set(SEED_ETCD_DIR ${PROJECT_SOURCE_DIR}/SEEDBP/SEEDETCD)
include_directories(SEED_ETCD_DIR)

#设置C++标准 判断是否是G++
if(CMAKE_COMPILER_IS_GNUCXX)
   set(CMAKE_CXX_STANDARD 14)
endif(CMAKE_COMPILER_IS_GNUCXX)

set(SOURCE_FILES seed_etcd.cpp)
add_library(SEED_BP_ETCD ${SOURCE_FILES})
# ./SEED/SEEDBP/SEEDCURL/CMakeLists.txt SEEDETCD(基础库)具体工程配置文件

# 工程名称,这里用SEED这个名字
project(SEEDCURL)

#设置子项目内部头文件路径
set(SEED_CURL_DIR ${PROJECT_SOURCE_DIR}/SEEDBP/SEEDCURL)
include_directories(SEED_CURL_DIR)

#设置C++标准 判断是否是G++
if(CMAKE_COMPILER_IS_GNUCXX)
   set(CMAKE_CXX_STANDARD 14)
endif(CMAKE_COMPILER_IS_GNUCXX)

set(SOURCE_FILES seed_curl.cpp)
add_library(SEED_BP_CURL ${SOURCE_FILES})

4.1. SEEDSERVER子工程配置

# ./SEED/SEEDSERVER/CMakeLists.txt, SEEDSERVER(生成项目)子工程配置文件

# 工程名称,这里用SEEDSERVER这个名字
project(SEEDSERVER)

#设置子项目路径

set(SEED_SERVER_DIR ${PROJECT_SOURCE_DIR}/SEEDSERVER)

# 添加子目录(每个子目录下都必须有自已的CMakeLists.txt文件)
set(SEED_FACE ${SEED_SERVER_DIR}/SEEDFACE)
add_subdirectory(SEED_FACE)

set(SEED_MANAGER ${SEED_SERVER_DIR}/SEEDMANAGER)
add_subdirectory(SEED_MANAGER)

4.1.1 SEEDFACE 和 SEEDMANAGER具体工程配置

# ./SEED/SEEDSERVER/SEEDFACE/CMakeLists.txt SEEDFACE(人脸服务)具体工程配置文件

# 最低版本要求,必须

# 工程名称,这里用SEEDFACE这个名字
project(SEEDFACE)

#设置子项目内部头文件路径
set(SEED_FACE_DIR ${PROJECT_SOURCE_DIR}/SEEDSERVER/SEEDFACE)
include_directories(SEED_FACE_DIR)

#设置C++标准 判断是否是G++
if(CMAKE_COMPILER_IS_GNUCXX)
   set(CMAKE_CXX_STANDARD 14)
endif(CMAKE_COMPILER_IS_GNUCXX)

#添加fpic选项
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”)

set(SOURCE_FILES seed_face.cpp)

add_executable(SEEDFACE ${SOURCE_FILES})

target_link_libraries(SEEDFACE seed_curl seed_etcd)
# ./SEED/SEEDSERVER/SEEDMANAGER/CMakeLists.txt SEEDMANAGER(人脸管理服务)具体工程配置文件

# 工程名称,这里用SEEDFACE这个名字
project(SEEDMANAGER)

#设置子项目内部头文件路径
set(SEED_MANAGER_DIR ${PROJECT_SOURCE_DIR}/SEEDSERVER/SEEDMANAGER)
include_directories(SEED_MANAGER_DIR)

#设置C++标准 判断是否是G++
if(CMAKE_COMPILER_IS_GNUCXX)
   set(CMAKE_CXX_STANDARD 14)
endif(CMAKE_COMPILER_IS_GNUCXX)

#添加fpic选项
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”)

set(SOURCE_FILES seed_manager.cpp)

add_executable(SEEDMANAGER ${SOURCE_FILES})

target_link_libraries(SEEDMANAGER seed_curl seed_etcd))

5. SEEDOTHER 配置,此处省略,CMake配置与SEEDSERVER配置一样,只需稍作修改即可。

6.SEEDOUT目录说明

   6.1 SEEDOUT 的bin 目录是用来存储项目生成的可执行文件,好处是不会把源文件目录污染。

   6.2SEEDOUT 的lib 和lib1 目录是用来存储生成库和依赖库的地方,目的同上

发布了21 篇原创文章 · 获赞 2 · 访问量 2875

猜你喜欢

转载自blog.csdn.net/ysf465639310/article/details/90755696