使用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-09C++實現(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-08C++解決大數(shù)組棧內(nèi)存不夠問題的方法分析
這篇文章主要介紹了C++解決大數(shù)組棧內(nèi)存不夠問題的方法,結(jié)合實例形式對比分析了C++針對大數(shù)組棧內(nèi)存不足情況的常見解決方法及其優(yōu)缺點,具有一定參考借鑒價值,需要的朋友可以參考下2018-05-05