使用CMake構(gòu)建一個(gè)簡單的C++項(xiàng)目的實(shí)現(xiàn)
一. 構(gòu)建一個(gè)簡單的項(xiàng)目
最基本的CMake項(xiàng)目是從單個(gè)源代碼文件構(gòu)建的可執(zhí)行文件。對(duì)于像這樣的簡單項(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è)簡單的C++項(xiàng)目的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)CMake構(gòu)建C++項(xiàng)目內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在while中使用cin>>a?為條件及注意事項(xiàng)說明
這篇文章主要介紹了在while中使用cin>>a?為條件及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符
這篇文章主要介紹了詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)
為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)2022-06-06

