使用CMake構(gòu)建一個(gè)簡(jiǎn)單的C++項(xiàng)目的實(shí)現(xiàn)
一. 構(gòu)建一個(gè)簡(jiǎn)單的項(xiàng)目
最基本的CMake項(xiàng)目是從單個(gè)源代碼文件構(gòu)建的可執(zhí)行文件。對(duì)于像這樣的簡(jiǎn)單項(xiàng)目,只需要一個(gè)包含三個(gè)命令的CMakeLists.txt
文件。注意:雖然CMake支持大寫、小寫和混合大小寫命令,但小寫命令是首選命令,并將在整個(gè)教程中使用。
任何項(xiàng)目的頂級(jí)CMakeLists.txt
都必須通過使用CMake_minimum_required()
命令指定最低CMake版本來啟動(dòng)。這將建立策略設(shè)置,并確保以下CMake函數(shù)使用兼容版本的CMake運(yùn)行。為了啟動(dòng)一個(gè)項(xiàng)目,我們使用project()
命令來設(shè)置項(xiàng)目名稱。每個(gè)項(xiàng)目都需要此調(diào)用,并且應(yīng)在cmake_minimum_required()
之后立即調(diào)用。正如我們稍后將看到的,此命令還可以用于指定其他項(xiàng)目級(jí)別的信息,如語言或版本號(hào)。最后,add_executable()
命令告訴CMake使用指定的源代碼創(chuàng)建一個(gè)可執(zhí)行文件
二. 構(gòu)建過程
1. 創(chuàng)建程序源文件
源文件包含兩個(gè):
- tutorial.cxx
- TutorialConfig.h.in
// TutorialConfig.h.in文件內(nèi)容 // 定義了兩個(gè)變量,可以在cmake構(gòu)建項(xiàng)目時(shí)進(jìn)行相應(yīng)的替換 #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
// tutorial.cxx文件內(nèi)容 // 計(jì)算輸入?yún)?shù)的平方根 #include <cmath> #include <iostream> #include <string> #include "TutorialConfig.h" int main(int argc, char* argv[]) { if (argc < 2) { // 打印版本信息 std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "." << Tutorial_VERSION_MINOR << std::endl; std::cout << "Usage: " << argv[0] << " number" << std::endl; return 1; } // 轉(zhuǎn)換輸入?yún)?shù)為double類型 const double inputValue = std::stod(argv[1]); // 計(jì)算平方根 const double outputValue = sqrt(inputValue); std::cout << "The square root of " << inputValue << " is " << outputValue << std::endl; return 0; }
2. 編寫CMakeList.txt文件
# 設(shè)置CMake最低版本為3.10 cmake_minimum_required(VERSION 3.10) # 設(shè)置項(xiàng)目的版本為1.0 project(Tutorial VERSION 1.0) # 設(shè)置變量CMAKE_CXX_STANDARD為11 # 設(shè)置變量CMAKE_CXX_STANDARD_REQUIRED為True set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) # 通過使用configure_file將TutorialConfig.h.in中的內(nèi)容拷貝到TutorialConfig.h中,并將其中需要替換的部分進(jìn)行替換 configure_file(TutorialConfig.h.in TutorialConfig.h) # 創(chuàng)建一個(gè)可執(zhí)行文件,名為Tutorial.exe add_executable(Tutorial tutorial.cxx) # 使用target_include_directories指明程序的頭文件所在目錄 target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")
3. 構(gòu)建項(xiàng)目并編譯源代碼
未構(gòu)建項(xiàng)目的情況下,源文件夾目錄中僅有三個(gè)文件,如下:
在程序原文件夾中創(chuàng)建一個(gè)文件夾,用于保存構(gòu)建的項(xiàng)目
mkdir Step1_build
進(jìn)入創(chuàng)建好的文件夾中,使用cmake構(gòu)建項(xiàng)目
cd Step1_buildcmake ..
使用cmake生成項(xiàng)目,生成可執(zhí)行文件
cmake --build .
進(jìn)入構(gòu)建文件夾(Step1_build),執(zhí)行可執(zhí)行程序Tutorial.exe
cd DebugTutorial 10
附件
到此這篇關(guān)于使用CMake構(gòu)建一個(gè)簡(jiǎn)單的C++項(xiàng)目的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)CMake構(gòu)建C++項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)文件操作實(shí)例(簡(jiǎn)單圖示講解)
與普通文件載體不同,文件是以硬盤為載體存儲(chǔ)在計(jì)算機(jī)上的信息集合,文件可以是文本文檔、圖片、程序等等,下面這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)文件操作實(shí)例的相關(guān)資料,需要的朋友可以參考下2023-02-02MATLAB實(shí)現(xiàn)五子棋游戲(雙人對(duì)戰(zhàn)、可悔棋)
這篇文章主要為大家詳細(xì)介紹了MATLAB實(shí)現(xiàn)五子棋游戲,可以進(jìn)行雙人對(duì)戰(zhàn)、也可悔棋,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06關(guān)于c++編譯protobuf時(shí)提示LNK2001 無法解析的外部符號(hào)的問題
這篇文章主要介紹了關(guān)于c++編譯protobuf時(shí)提示LNK2001 無法解析的外部符號(hào)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12數(shù)據(jù)結(jié)構(gòu)之歸并排序的實(shí)例詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之歸并排序的實(shí)例詳解的相關(guān)資料,這里對(duì)歸并排序進(jìn)行詳細(xì)介紹,需要的朋友可以參考下2017-08-08使用C語言順序表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧的代碼示例
這篇文章主要給大家介紹了如何使用C語言順序表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧,文章通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09C++實(shí)現(xiàn)LeetCode(133.克隆無向圖)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(133.克隆無向圖),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07如何實(shí)現(xiàn)在C++中調(diào)用C函數(shù)
這篇文章主要介紹了如何實(shí)現(xiàn)在C++中調(diào)用C函數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C++解決大數(shù)組棧內(nèi)存不夠問題的方法分析
這篇文章主要介紹了C++解決大數(shù)組棧內(nèi)存不夠問題的方法,結(jié)合實(shí)例形式對(duì)比分析了C++針對(duì)大數(shù)組棧內(nèi)存不足情況的常見解決方法及其優(yōu)缺點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05