CMake入門1——CMake與VS編譯器和nmake的結合使用
本文描述在Win10-64位系統中安裝CMake、cmake-gui的簡單使用及其與VS2015編譯器的結合使用,以及cmake命令列與nmake的結合使用。
下載
安裝
CMake的安裝非常簡單。壓縮包版本直接解壓即可,安裝版本也可一直點選下一步進行安裝。為了使用方便,可將CMake配置到環境變數中,當然,這一步也可以在安裝過程中設定。另外需要注意的是為了避免不必要的麻煩,路徑中最好不要包括中文字元。下面簡單描述一下安裝過程。
- 雙擊下載的安裝包,進入安裝介面,點選[Next]。
- 勾選同意許可後,點選[Next]。
- 可在此處選擇將CMake路徑新增到環境變數中,並且建立CMake GUI程式的桌面快捷方式。然後點選[Next]。
- 可在此處自定義安裝目錄,設定好後點擊[Next]。
- 開始安裝,安裝完成後點選[Next]。
- 安裝完成,點選[Finish],結束安裝過程。
- 安裝完成後,即可使用CMake了。在命令列中輸入
"cmake --version"
,可看到如下圖所示的輸出。
例1 使用cmake-gui與VS生成器
本例使用cmake-gui和VS生成器構建出VS工程,然後用VS工具開啟專案進行編譯。
1. 新建CMakeTest目錄,在CMakeTest目錄下新建demo1目錄,作為測試專案的根目錄。在demo1下新建main.cpp和CMakeLists.txt檔案。
main.cpp檔案的內容很簡單,就是輸出一個提示字串:
#include <iostream>
using namespace std;
void main()
{
cout<<"cmake test demo 1"<<endl;
getchar();
}
CMakeLists檔案內容如下:
# CMake最低版本要求
cmake_minimum_required(VERSION 3.10.1)
# 專案資訊
project(demo1)
# 指定生成目標
add_executable(demo main.cpp)
CMakeLists.txt 的語法比較簡單,由命令、註釋和空格組成。命令由命令名稱、小括號和引數組成,引數之間使用空格進行間隔,且命令是不區分大小寫的。符號 # 後面的內容被認為是註釋。
對於上面的 CMakeLists.txt 檔案,依次出現了幾個命令:
- cmake_minimum_required:指定執行此配置檔案所需的 CMake 的最低版本,如果低於3.10.1版本,則構建過程會被終止
- project:引數值是 demo1,該命令表示專案的名稱是 demo1
- add_executable: 將名為 main.cpp 的原始檔編譯成一個名稱為 demo 的可執行檔案
2. 開啟cmake-gui程式,在上方配置兩個目錄:
- 第一個是CMakeLists檔案目錄,cmake據此開始執行
- 第二個是cmake構建後的專案目錄
3. 配置好點選[Configure]開始執行配置過程。首先會彈出編譯器選擇介面,此處使用預設的VS2015-32位編譯器,直接點選[Finish],開始配置。
4. 第一次配置完成後如圖所示,紅色的兩行是新的配置值,再次點選[Configure]即可。
5. 配置完成後,在build目錄生成了如下的檔案
6. 點選[Generate],開始生成VS專案
7. 生成完成後,在build目錄下生成了demo1對於的VS專案
8. 通過點選cmake-gui中下放的[Open Project]按鈕或者直接雙擊build目錄下的demo1.sln,即可在VS中開啟工程。
9. cmake生的demo1工程總共有3個專案
- ZERO_CHECK:該專案會檢查生成工程的 CMake 配置檔案( CMakeLists.txt )是否更新。如更新,將執行 CMake 重新生成工程檔案。如果確信 CMakeLists.txt 不會被更新,或者希望手工執行 CMake 重新生成工程檔案,可以在 CMakeLists.txt 配置檔案中新增 set(CMAKE_SUPPRESS_REGENERATION FALSE) 命令, ZERO_CHECK 目標將不會生成。
- ALL_BUILD:該目標會導致工程中所有專案被構建,類似 Visual Studio 的 Build All 或者 make 的 make all命令。
- demo:專案本身,就是在CMakeLists.txt檔案中配置的
project(demo1)
10. 在VS中通過單獨生成專案demo1或者直接生成專案All_BUILD後,可以在build下的相應目錄看到可執行檔案demo.exe已經生成。雙擊demo.exe後,可以看到程式輸出。
11. 如果不想用VS開啟工程,也可以使用msbuild.exe編譯demo1工程。首先需要開啟VS命令列,因為cmake-gui中選擇的編譯器是32位的,所以此處選擇”VS2015 x86 本機工具命令提示符”。
開啟後在命令列中進入到demo1的build目錄,執行msbuild demo1.sln
即可編譯demo1專案。編譯完成後可以在debug中看到生成的demo.exe檔案,雙擊可執行。
1. 新建專案demo2,將demo1中的main.cpp和CMakeLists.txt檔案拷貝過來。將CMakeLists.txt檔案中的project專案配置為demo2。 2. 同樣從VS命令列進入到demo2目錄,執行命令:
cmake -G "NMake Makefiles" .
執行完畢後,即可看到在demo2目錄中生成了一些檔案:
其中重要的是Makefile檔案,這是用來編譯專案的。在命令列中繼續執行nmake命令開始編譯,編譯完成後可以看到在demo2目錄生成了demo.exe程式。允許後可以看到輸出。
例3 PreLoad.cmake用法
在命令列下使用cmake,需要用”-G”選項指定生成器。每次都輸入感覺比較麻煩,可以將其配置在”PreLoad.cmake”檔案中。新建專案demo3,準備好main.cpp和CMakeLists.txt檔案,然後demo3目錄下新建檔案”PreLoad.cmake”,輸入:
set(CMAKE_GENERATOR "NMake Makefiles" CACHE INTERNAL "" FORCE)
然後執行"cmake ."
即可配置,然後執行"nmake"
就可以編譯。
相關推薦
CMake入門1——CMake與VS編譯器和nmake的結合使用
本文描述在Win10-64位系統中安裝CMake、cmake-gui的簡單使用及其與VS2015編譯器的結合使用,以及cmake命令列與nmake的結合使用。 下載 安裝 CMake的安裝非常簡單。壓縮包版本直接解壓即可,安裝版本也可一直
機器學習入門 - 1. 介紹與決策樹(decision tree)
recursion machine learning programmming 機器學習(Machine Learning) 介紹與決策樹(Decision Tree)機器學習入門系列 是 個人學習過程中的一些記錄與心得。其主要以要點形式呈現,簡潔明了。1.什麽是機器學習?一個比較概括的理解是:
scala入門1(簡介與基礎語法1)
scala是什麼? Scala 是一門 函式式的面向物件語言。他執行在Java虛擬機器上. 第一個Scala例子 作為學習Scala的第一步,我們將首先寫一個標準的HelloWorld,這個雖然不是很有趣,但是它可以讓你對Scala有一個
OPenCV筆記(3.4.1環境配置與擴充套件包編譯 vs 2017 和Qt 5.11)
1.官網 https://opencv.org/2.下載標準包 https://opencv.org/releases.html下載winpack之後解壓,配置環境變數,此方法只能使用標準的釋出庫,一些特別的庫無法使用,比如人臉識別的庫3.如果需要人臉識別等特殊的庫3.41版
Windows下Cmake與VS聯合制作dll
接觸大的專案,鋪天蓋地的程式碼總是會掩蓋了開發環境和工具的本質,上手之前,跑跑小的歷程有助於對專案的理解,提高效率。 首先記錄一下 dll(動態連結庫)的生成過程: 建立資料夾 Execise_CmakeDLLgitGtest 建立兩個子資料
1. cmake-流程和使用
cmake基本流程 配置:在CMakeLists.txt編寫規則(編譯規則(預處理 編譯 彙編 連結), 安裝(部署)規則, 測試規則)。 生成:根據CMakeLists.txt 和 引數(使用cmake時傳入的引數或者環境變數引數) 針對不同
PCL 1.8.0+VS 2015+CMake的安裝配置詳細教程
看了很多很多部落格,配了刪,刪了配,機房win7電腦足足配置了兩天,但在自己電腦win10配置又遇到了別的問題,最後又安裝cmake,自己的電腦又搞了兩天。看了網上的部落格,結合自己的配置過程,希望寫個更整體、更詳細的配置說明,來幫助更多人。有的部落格寫的很詳
VS的Release模式下進行除錯的VS修改和cmake修改
在有的情況下,我們可能不能直接利用Debug模式進行程式除錯,那麼如何在Release模式下進行程式除錯呢? 一、VS下修改方法
[js高手之路]深入淺出webpack系列1-安裝與基本打包用法和命令參數
查看 2-2 gre colors 令行 一起 切換 json round webpack,我想大家應該都知道或者聽過,Webpack是前端一個工具,可以讓各個模塊進行加載,預處理,再進行打包。現代的前端開發很多環境都依賴webpack構建,比如vue官方就推薦使用webp
python入門:1-99所有數的和的等式
print spa color python入門 空白 env temp 字符串 如果 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #1-99所有數的和的等式 4 #start(開始,譯音:思達二測)sum
10-Linux基礎入門(八)-文件和目錄的屬性及權限之用戶與組和時間戳基礎
log 信息 p s center 新浪 shell 使用 自己的 用戶配置 一、概述Linux是一個多用戶、多任務的操作系統,對於Linux系統來說,由於角色不同,權限和所完成的任務也不同。用戶的角色是通過UID和GID識別的,用戶的UID就相當於我們的身份證一樣,用戶名
CMake入門實戰
rar 官網 spa 方案 link_list 圖片 mar watermark head 本文用來記錄基本的Cmake用法,以一個實例,講解如何通過cmake構建一個一個基本的工程,文件的目錄如下: 說明: bin文件夾下的debug和release分別存放編譯輸出的
機器學習之微積分與概率論入門1
公式 連續 === 等於 產品 c2c ges cto mar 這兩門學科作為機器學習的必備科目! 一、微積分1夾逼定理通俗的講:A≤B≤C當求極限時,存在A=C,則說明B也等於A和C案例1: 案例2: 2 兩個重要極限 3 導數通俗的講就是曲線的斜率二階導數是斜率變化快慢
動態庫(.dll)的建立與使用———VS編譯器實現
一、動態庫的概念 ①概念:動態庫連結時不復制,程式執行時由系統動態載入到記憶體,供程式呼叫。而且系統只加載一次,可以被多個程式共用。 ②特點: 動態函式庫在編譯的時候並沒有被編譯進目的碼中,需要用到相應的功能,程式碼才會被呼叫到程式中,節約記憶體 動態庫的改變,程式
靜態庫(.lib)的建立與使用———VS編譯器實現
一、靜態庫的概念 ①概念:靜態庫是指在我們的應用中,有一些公共程式碼是需要反覆使用,就把這些程式碼編譯為“庫”檔案;在連結步驟中,聯結器將從庫檔案取得所需的程式碼,複製到生成的可執行檔案中的這種庫。 ②特點: 靜態庫連結之後,靜態庫改變,對程式不再產生影響,移植方便
CMake入門教程(一)
之前的一篇部落格介紹了CMake一些簡單的基礎情況:CMake的簡介、安裝以及基本的使用 現在一起來學習一下CMakeLists的基礎命令。 ※※※※※※※※※※※※※※※※※※※※※※CMake的基本使用語法※※※※※※※※※※※※※※※※※※※※※※※※※※※ ①CMake使用$
win10+VS2017+PCL1.8.1+CMake
1. 平臺 win10 VS2017:將CMake生成的專案檔案執行產生可執行檔案。 PCL1.8.1 :PCL是點雲演算法庫。 CMake:為編寫的程式進行環境配置及生成專案檔案。安裝CMake,就不會每次編寫專案是還要兼顧配置環境變數。 2. 資料包 集合包:PCL-1.
python學習入門番外1 變數與物件,函式傳值問題 2018.8.18
在函式傳值的問題中,多有對函式傳值是按值傳遞還是按引用傳遞引數的討論,這些都源於C系語言。 但事實上,python中並不適用。 預設情況下,在C語言中,引數是按照值來傳遞的,這需要生成函式的傳入引數的一個副本以供使用,這時你不能修改傳入引數的初始內容 當使用指標變數(*var)時,將
Android Studio JNI (影象變灰過程)使用cmake (1)
Android Studio JNI (影象變灰過程)使用cmake (1) 1.開始建立第一個AS 工程; 2.選擇完畢後下一步 3.再下一步後直接點選完成,然後我們開始執行一下,即可看到Hello from JNI 4.下面我們看下CMakeLists.txt檔案 CMak
CMake入門教程(二)
1、使用set進行變數設定 之前使用:aux_source_directory命令將目錄下的所有.cpp檔案儲存到變數裡面,這樣,我們就不用一個一個去新增原始檔來生成可執行檔案,其實我們使用set命令也可以完成此操作。 #將untile.h以及untile.cpp兩個檔案新增到SrcPa