CMake語法及CMakeList.txt簡單使用小結(jié)
CMake簡單介紹
Cmake主要用于開發(fā)跨平臺(tái)的C++項(xiàng)目,對(duì)于Windows程序員來說,在Linux上開發(fā)C++程序會(huì)非常困難,一來沒用過makefile,其語法非常生疏難懂,二來visual studio編譯器實(shí)在優(yōu)點(diǎn)太多(目前最新推出的vs2022中開啟效率得到了質(zhì)的提升,而且內(nèi)置的IntelliCode更是直呼內(nèi)行)。這就導(dǎo)致C++不同于其他語言,硬生生催生出Windows程序員和Linux程序員兩個(gè)群體,直到出現(xiàn)CMake這個(gè)局面才被打破。
CMake可以在Linux上自動(dòng)生成makefile,在Windows下可以生成vs解決方案sln,對(duì)于大規(guī)??缙脚_(tái)項(xiàng)目絕對(duì)是首選。相比于makefile,CMake語法要簡單的多。自vs2017之后vs便支持CMake語法,到目前vs2022仍然支持,其效果之不必多說。
TIPS:以下均使用vs2022進(jìn)行介紹。
創(chuàng)建項(xiàng)目
TIPS:解決方案就是項(xiàng)目的合集,項(xiàng)目是對(duì)應(yīng)每一個(gè)靜態(tài)庫,動(dòng)態(tài)庫和可執(zhí)行文件的編譯目標(biāo)。
創(chuàng)建完成
TIPS:建議紅色框框里面的內(nèi)容一定要看一遍。
用CMake構(gòu)建一個(gè)項(xiàng)目工程,是通過一個(gè)或多個(gè)CMakeLists.txt文件來控制的。CMakeLists.txt中包含一系列命令來描述需要執(zhí)行的構(gòu)建。
CMake語法
在CMakeLists.txt中的命令的語法,都是形如下面這種格式:
command (args ...)
- command:命令的名字
- args:參數(shù)列表。多個(gè)參數(shù)使用空格隔開。
常用的命令
cmake_minimum_required
設(shè)置項(xiàng)目要求的CMake最低版本號(hào),如果當(dāng)前版本的CMake低于所需的值,它將停止處理項(xiàng)目并報(bào)告錯(cuò)誤。注意務(wù)必在project
之前調(diào)用該命令,一般是在CMakeLists.txt文件開頭調(diào)用。命令格式為:
cmake_minimum_required(VERSION major.minor[.patch[.tweak]] [FATAL_ERROR])
使用示例:
cmake_minimum_required(VERSION 2.8.5) cmake_minimum_required(VERSION 3.8)
add_executable
使用指定的源文件給項(xiàng)目添加一個(gè)可執(zhí)行文件。命令格式為:
add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
參數(shù)介紹:
- name:該命令調(diào)用列出的源文件來構(gòu)建的可執(zhí)行目標(biāo)。 對(duì)應(yīng)于邏輯目標(biāo)名稱,在項(xiàng)目中必須是全局唯一的。構(gòu)建的可執(zhí)行文件的實(shí)際文件名是基于本機(jī)平臺(tái)的約定。
- WIN32:如果給出WIN32,則在創(chuàng)建的目標(biāo)上設(shè)置屬性WIN32_EXECUTABLE。
- MACOSX_BUNDLE:如果給定MACOSX_BUNDLE,將在創(chuàng)建的目標(biāo)上設(shè)置相應(yīng)的屬性。
- EXCLUDE_FROM_ALL:如果給定EXCLUDE_FROM_ALL,將在創(chuàng)建的目標(biāo)上設(shè)置相應(yīng)的屬性。
- source:源碼列表。
使用示例:
add_executable (CMakeClient0331 "CMakeClient0331.cpp" "CMakeClient0331.h")
project
為整個(gè)工程設(shè)置一個(gè)工程名。命名格式為:
project (<PROJECT-NAME> [LANGUAGES] [<language-name>...]) project (<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [LANGUAGES<language-name>...])
使用示例:
project ("CMakeClient0331")
set
將一個(gè)CMAKE變量設(shè)置為給定值。命名格式為:
set(<variable> <value>... [PARENT_SCOPE])
使用示例:
set(COCOS2D_ROOT ${CMAKE_SOURCE_DIR}/cocos2d)
常用的變量
使用${ }進(jìn)行變量的引用。例如:message(${CMAKE_VERSION}),表示向用戶顯示cmake的完整版本號(hào)。CMake還提供了很多有用的變量。以下僅列舉常用的變量:
CMAKE_BINARY_DIR
:構(gòu)建樹的頂層路徑CMAKE_COMMAND
:指向CMake可執(zhí)行文件的完整路徑CMAKE_CURRENT_BINARY_DIR
:當(dāng)前正在被處理的二進(jìn)制目錄的路徑。CMAKE_CURRENT_SOURCE_DIR
:指向正在被處理的源碼目錄的路徑。CMAKE_HOME_DIRECTORY
:指向源碼樹頂層的路徑。CMAKE_PROJECT_NAME
:當(dāng)前工程的工程名。CMAKE_ROOT
:CMake的安裝路徑。CMAKE_SOURCE_DIR
:源碼樹的頂層路徑。CMAKE_VERSION
:cmake的完整版本號(hào)。PROJECT_BINARY_DIR
:指向當(dāng)前編譯工程構(gòu)建的全路徑。<PROJECT-NAME>_BINARY_DIR
:指向當(dāng)前編譯工程構(gòu)建的全路徑。<PROJECT-NAME>_SOURCE_DIR
:指向構(gòu)建工程的全路徑。PROJECT_SOURCE_DIR
:指向構(gòu)建工程的全路徑。PROJECT_NAME
:project命令傳遞的工程名參數(shù)。<PROJECT-NAME>_VERSION
:項(xiàng)目的完整版本號(hào)。
內(nèi)置宏
- EXECUTABLE_OUTPUT_PATH :用于確定可執(zhí)行文件的輸出路徑
- CMAKE_ARCHIVE_OUTPUT_DIRECTORY:靜態(tài)庫lib的輸出路徑
- CMAKE_DEBUG_POSTFIX:設(shè)置Debug版本下的庫文件后綴名
- CMAKE_RELEASE_POSTFIX:設(shè)置Release版本下庫文件的后綴名
簡單使用實(shí)例
以下項(xiàng)目中的CMakeLists.txt文件內(nèi)容如下(應(yīng)用場(chǎng)景為:生成客戶端和服務(wù)端的可執(zhí)行文件,同時(shí)指定生成可執(zhí)行文件的目錄),根目錄的CMakeLists.txt無需修改。
# CMakeList.txt: Server0327 的 CMake 項(xiàng)目,在此處包括源代碼并定義 # 項(xiàng)目特定的邏輯。 # cmake_minimum_required (VERSION 3.8) #exe程序的路徑 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin) # 將源代碼添加到此項(xiàng)目的可執(zhí)行文件。 add_executable (Server "Server0327.cpp" "Server0327.h") add_executable (Client "CMakeClient0331.cpp" "CMakeClient0331.h") # TODO: 如有需要,請(qǐng)?zhí)砑訙y(cè)試并安裝目標(biāo)。
運(yùn)行效果展示
到此這篇關(guān)于CMake語法及CMakeList.txt簡單使用小結(jié)的文章就介紹到這了,更多相關(guān)CMake語法及CMakeList.txt使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VC實(shí)現(xiàn)圖片拖拽及動(dòng)畫的實(shí)例
這篇文章介紹了VC實(shí)現(xiàn)圖片拖拽及動(dòng)畫的實(shí)例,有需要的朋友可以參考一下2013-08-08深入探討:宏、內(nèi)聯(lián)函數(shù)與普通函數(shù)的區(qū)別
本篇文章是對(duì)宏、內(nèi)聯(lián)函數(shù)與普通函數(shù)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++中的移動(dòng)構(gòu)造函數(shù)及move語句示例詳解
這篇文章主要給大家介紹了關(guān)于C++中移動(dòng)構(gòu)造函數(shù)及move語句的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10C++學(xué)習(xí)之虛函數(shù)表與多態(tài)詳解
這篇文章主要為大家詳細(xì)介紹了C++中虛函數(shù)表與多態(tài)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定的幫助,感興趣的小伙伴可以了解一下2023-03-03C語言中用于產(chǎn)生隨機(jī)數(shù)的函數(shù)使用方法總結(jié)
這篇文章主要介紹了C語言中用于產(chǎn)生隨機(jī)數(shù)的函數(shù)使用方法總結(jié),分別介紹了rand()函數(shù)和srand()函數(shù)以及封裝出的arc4random()函數(shù),需要的朋友可以參考下2016-05-05Qt一個(gè)進(jìn)程運(yùn)行另一個(gè)進(jìn)程的實(shí)現(xiàn)方法
本文主要介紹了Qt一個(gè)進(jìn)程運(yùn)行另一個(gè)進(jìn)程的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04C語言如何利用ASCII碼表統(tǒng)計(jì)字符串每個(gè)字符出現(xiàn)的次數(shù)
這篇文章主要介紹了C語言如何利用ASCII碼表統(tǒng)計(jì)字符串每個(gè)字符出現(xiàn)的次數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01C++11生成隨機(jī)數(shù)(random庫)的使用
隨機(jī)數(shù)在很多地方都可以用到,本文主要介紹了C++11生成隨機(jī)數(shù)(random庫)的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01