專案目錄結構如下:
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...