CMake 專案管理

2021-09-24 03:16:29 字數 4429 閱讀 1451

專案目錄結構如下:

seed:總專案

seed_bp: 專案公共依賴庫

seed_server:業務後台服務

seedother:其他後台服務

seedout:專案輸出目錄已經依賴目錄

2.目錄結構圖

3.cmakelist.txt編寫

3.1.工程總配置

# ./seed/cmakelists.txt,工程總配置檔案

# 最低版本要求,必須

cmake_minimum_required(version 3.0)

# 工程名稱,這裡用seed這個名字

project(seed)

# 新增include目錄,本例公共標頭檔案在seed/seedbp/include目錄下,所以直接取$/seedbp/include

set(seed_include_dir $/seedbp/include)

include_directories(seed_include_dir)

set(seed_lib_dir1 $/seedout/lib)

set(seed_lib_dir2 $/seedout/lib2)

link_directories($ $ /usr/local/libs /usr/lib)

# 設定生成的庫檔案目錄,專案的成庫目錄和依賴庫lib目錄相同(/seed/seedout/lib)

set(library_output_path $)

# 設定可執行檔案目錄,專案的成庫目錄和依賴庫bin目錄相同(/seed/seedout/bin)

set(seed_bin_dir $/seedout/bin)

set(executable_output_path $)

# 新增子目錄(每個子目錄下都必須有自已的cmakelists.txt檔案)

set(seed_bp $/seedbp)

add_subdirectory(seed_bp)

set(seed_server $/seedserver)

add_subdirectory(seed_server)

set(seed_other $/seedother)

add_subdirectory(seed_other)

3.2seedbp工程配置

# ./seed/seedbp/cmakelists.txt,seedbp(基礎庫)子工程配置檔案

# 工程名稱,這裡用seed這個名字

project(seedbp)

#設定子專案路徑

set(seed_bp_dir $/seedbp)

# 新增子目錄(每個子目錄下都必須有自已的cmakelists.txt檔案)

set(seed_bp $/seedcurl)

add_subdirectory(seed_bp)

set(seed_server $/seedetcd)

add_subdirectory(seed_server)

3.2.1 seedetcd 和 seedcurl工程配置

# ./seed/seedbp/seedetcd/cmakelists.txt seedetcd(基礎庫)具體工程配置檔案

# 工程名稱,這裡用seed這個名字

project(seedetcd)

#設定子專案內部標頭檔案路徑

set(seed_etcd_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 $)

# ./seed/seedbp/seedcurl/cmakelists.txt seedetcd(基礎庫)具體工程配置檔案

# 工程名稱,這裡用seed這個名字

project(seedcurl)

#設定子專案內部標頭檔案路徑

set(seed_curl_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 $)

4.1. seedserver子工程配置

# ./seed/seedserver/cmakelists.txt, seedserver(生成專案)子工程配置檔案

# 工程名稱,這裡用seedserver這個名字

project(seedserver)

#設定子專案路徑

set(seed_server_dir $/seedserver)

# 新增子目錄(每個子目錄下都必須有自已的cmakelists.txt檔案)

set(seed_face $/seedface)

add_subdirectory(seed_face)

set(seed_manager $/seedmanager)

add_subdirectory(seed_manager)

4.1.1 seedface 和 seedmanager具體工程配置

# ./seed/seedserver/seedface/cmakelists.txt seedface(人臉服務)具體工程配置檔案

# 最低版本要求,必須

# 工程名稱,這裡用seedface這個名字

project(seedface)

#設定子專案內部標頭檔案路徑

set(seed_face_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「$ -fpic」)

set(source_files seed_face.cpp)

add_executable(seedface $)

target_link_libraries(seedface seed_curl seed_etcd)

# ./seed/seedserver/seedmanager/cmakelists.txt seedmanager(人臉管理服務)具體工程配置檔案

# 工程名稱,這裡用seedface這個名字

project(seedmanager)

#設定子專案內部標頭檔案路徑

set(seed_manager_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「$ -fpic」)

set(source_files seed_manager.cpp)

add_executable(seedmanager $)

target_link_libraries(seedmanager seed_curl seed_etcd))

5. seedother 配置,此處省略,cmake配置與seedserver配置一樣,只需稍作修改即可。

6.seedout目錄說明

6.1 seedout 的bin 目錄是用來儲存專案生成的可執行檔案,好處是不會把源檔案目錄汙染。

6.2seedout 的lib 和lib1 目錄是用來儲存生成庫和依賴庫的地方,目的同上

CMake 專案實踐

基本語法 linux 下 opencv cmake 平台選擇 參考 win10 cmake mingw 簡單使用 編寫原始碼和cmakelists.txt 在原始碼路徑下新建子目錄build,並進入 執行命令cmake g mingw makefiles win下只生成makefiles,省得出現各...

CMake構建CUDA專案

在大量的c c 的專案中都使用cmake來進行專案的管理,而cuda又是很流行的平行計算庫,利用cmake來構建cuda專案就顯得很有必要了,而且專案中使用的cmakelists.txt基本框架一致的,下面簡單地記載一下這種cmakelists.txt檔案的內容 cmakelists.txt for...

Qt專案 Cmake出錯

cmake warning dev at c qt qt5.2.1 5.2.1 msvc2012 64 lib cmake qt5core qt5coremacros.cmake 224 configure file configure file called with unknown argume...