CMake入門實戰
阿新 • • 發佈:2018-05-27
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工程。
- 打開cmd命令行,切換到CmakeList.txt所在的目錄。
- 輸入如下命令並執行:
3.生成的vs解決方案如下:
說明: -G表示生成的目標工程類型,這裏指定的vs2008的工程,默認的32位工程,也可以通過參數指定要生成的工程位數為64為,具體參數如下:
到這裏,一個簡易的基本的cmake配置文件的框架就完成了。cmake功能非常強大,更復雜的功能參考CMake官網。
CMake入門實戰