1. 程式人生 > >CMake入門實戰

CMake入門實戰

rar 官網 spa 方案 link_list 圖片 mar watermark head

本文用來記錄基本的Cmake用法,以一個實例,講解如何通過cmake構建一個一個基本的工程,文件的目錄如下:
技術分享圖片
說明:

  • bin文件夾下的debug和release分別存放編譯輸出的文件和相關依賴的動態庫。
  • common為公共目錄,include為公共頭文件,libs裏面是公共靜態庫。
  • mysqlpp目錄下是當前項目的源代碼。
  • CMakeList.txt是用來編寫組織工程結構配置的文件。

編寫CMakeList.txt

CMakeList.txt的詳細內容如下,每一個配置都有詳細的說明,可以根據實際需求刪減部分配置或者增添部分配置。這裏的實例是生成一個動態庫的

#需要cmake的最低版本
CMAKE_MINIMUM_REQUIRED 
(VERSION 3.5.2) #設置一個變量作為工程名字以及輸出文件名 SET ( MYSQLPP_LIBRARY_NAME "mysqlpp" ) PROJECT (${MYSQLPP_LIBRARY_NAME}) #頭文件包含路徑 INCLUDE_DIRECTORIES( common/include common/include/mysql ) #預編譯宏 所有宏都以 -D 開頭 ADD_DEFINITIONS( -D_USRDLL -DDLL_EXPORTS -DUNICODE -D_UNICODE -DMYSQLPP_MAKING_DLL -DHAVE_MYSQL_SSL_SET ) #靜態庫庫路徑
LINK_DIRECTORIES( common/libs ) #添加需要鏈接的靜態庫名稱(此處添加的是存在debug版本的靜態庫) SET(LINK_LIBRARY libmysql ) #配置debug版本靜態庫的名字後面加 ‘d‘,區別debug與release版本,這裏規則可能不一樣,根據實際情況調整 set (LINK_LIST "") foreach(x ${LINK_LIBRARY}) list (APPEND LINK_LIST debug ${x}d optimized ${x}) endforeach() #頭文件 FILE(GLOB CURRENT_HEADERS "mysqlpp/*.h"
) SOURCE_GROUP("Header Files" FILES ${CURRENT_HEADERS}) #源文件 FILE(GLOB SOURCES "mysqlpp/*.cpp") #設置輸出路徑 set(LIBRARY_OUTPUT_PATH bin) #指定輸出靜態庫的名字 ADD_LIBRARY(${MYSQLPP_LIBRARY_NAME} SHARED ${SOURCES} ${CURRENT_HEADERS} ) #添加所有鏈接的靜態庫 target_link_libraries( ${MYSQLPP_LIBRARY_NAME} #只有release版本的庫單獨寫到這裏,就是debug與release均鏈接這個庫,不做區分 ws2_32 #存在debug與release兩個版本的靜態庫直接引用上面經過處理的宏 ${LINK_LIST} )

註意:

生成工程文件

以windows下生成指定版本的vs工程文件為例,講解如何用命令行生成指定版本的vs工程。

  1. 打開cmd命令行,切換到CmakeList.txt所在的目錄。
  2. 輸入如下命令並執行:
    技術分享圖片
    3.生成的vs解決方案如下:
    技術分享圖片
    說明: -G表示生成的目標工程類型,這裏指定的vs2008的工程,默認的32位工程,也可以通過參數指定要生成的工程位數為64為,具體參數如下:
    技術分享圖片

到這裏,一個簡易的基本的cmake配置文件的框架就完成了。cmake功能非常強大,更復雜的功能參考CMake官網。

CMake入門實戰