使用CMake構(gòu)建一個簡單的C++項目的實現(xiàn)
一. 構(gòu)建一個簡單的項目
最基本的CMake項目是從單個源代碼文件構(gòu)建的可執(zhí)行文件。對于像這樣的簡單項目,只需要一個包含三個命令的CMakeLists.txt文件。注意:雖然CMake支持大寫、小寫和混合大小寫命令,但小寫命令是首選命令,并將在整個教程中使用。
任何項目的頂級CMakeLists.txt都必須通過使用CMake_minimum_required()命令指定最低CMake版本來啟動。這將建立策略設(shè)置,并確保以下CMake函數(shù)使用兼容版本的CMake運行。為了啟動一個項目,我們使用project()命令來設(shè)置項目名稱。每個項目都需要此調(diào)用,并且應(yīng)在cmake_minimum_required()之后立即調(diào)用。正如我們稍后將看到的,此命令還可以用于指定其他項目級別的信息,如語言或版本號。最后,add_executable()命令告訴CMake使用指定的源代碼創(chuàng)建一個可執(zhí)行文件
二. 構(gòu)建過程
1. 創(chuàng)建程序源文件
源文件包含兩個:
- tutorial.cxx
- TutorialConfig.h.in
// TutorialConfig.h.in文件內(nèi)容 // 定義了兩個變量,可以在cmake構(gòu)建項目時進行相應(yīng)的替換 #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
// tutorial.cxx文件內(nèi)容
// 計算輸入?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]);
// 計算平方根
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è)置項目的版本為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中,并將其中需要替換的部分進行替換
configure_file(TutorialConfig.h.in TutorialConfig.h)
# 創(chuàng)建一個可執(zhí)行文件,名為Tutorial.exe
add_executable(Tutorial tutorial.cxx)
# 使用target_include_directories指明程序的頭文件所在目錄
target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")
3. 構(gòu)建項目并編譯源代碼
未構(gòu)建項目的情況下,源文件夾目錄中僅有三個文件,如下:

在程序原文件夾中創(chuàng)建一個文件夾,用于保存構(gòu)建的項目
mkdir Step1_build

進入創(chuàng)建好的文件夾中,使用cmake構(gòu)建項目
cd Step1_buildcmake ..



使用cmake生成項目,生成可執(zhí)行文件
cmake --build .

進入構(gòu)建文件夾(Step1_build),執(zhí)行可執(zhí)行程序Tutorial.exe
cd DebugTutorial 10

附件
到此這篇關(guān)于使用CMake構(gòu)建一個簡單的C++項目的實現(xiàn)的文章就介紹到這了,更多相關(guān)CMake構(gòu)建C++項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MATLAB實現(xiàn)五子棋游戲(雙人對戰(zhàn)、可悔棋)
這篇文章主要為大家詳細介紹了MATLAB實現(xiàn)五子棋游戲,可以進行雙人對戰(zhàn)、也可悔棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
關(guān)于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題
這篇文章主要介紹了關(guān)于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
數(shù)據(jù)結(jié)構(gòu)之歸并排序的實例詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之歸并排序的實例詳解的相關(guān)資料,這里對歸并排序進行詳細介紹,需要的朋友可以參考下2017-08-08
使用C語言順序表數(shù)據(jù)結(jié)構(gòu)實現(xiàn)棧的代碼示例
這篇文章主要給大家介紹了如何使用C語言順序表數(shù)據(jù)結(jié)構(gòu)實現(xiàn)棧,文章通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的參考價值,需要的朋友可以參考下2023-09-09
C++實現(xiàn)LeetCode(133.克隆無向圖)
這篇文章主要介紹了C++實現(xiàn)LeetCode(133.克隆無向圖),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
如何實現(xiàn)在C++中調(diào)用C函數(shù)
這篇文章主要介紹了如何實現(xiàn)在C++中調(diào)用C函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
C++解決大數(shù)組棧內(nèi)存不夠問題的方法分析
這篇文章主要介紹了C++解決大數(shù)組棧內(nèi)存不夠問題的方法,結(jié)合實例形式對比分析了C++針對大數(shù)組棧內(nèi)存不足情況的常見解決方法及其優(yōu)缺點,具有一定參考借鑒價值,需要的朋友可以參考下2018-05-05

