日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【转载】CMake 简介和 CMake 模板

發(fā)布時(shí)間:2025/4/16 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】CMake 简介和 CMake 模板 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自我的博客:?CMake 簡(jiǎn)介和 CMake 模板?。

如果你用 Linux 操作系統(tǒng),使用 cmake 會(huì)簡(jiǎn)單很多,可以參考一個(gè)很好的教程:?CMake 入門實(shí)戰(zhàn) | HaHack?。如果你用 Linux 操作系統(tǒng),而且只是運(yùn)行一些小程序,可以看看我的另一篇博客:?你就編譯一個(gè) cpp,用 CMake 還不如用 pkg-config 呢?。

但如果你用 Windows,很大的可能你會(huì)使用圖形界面的 CMake(cmake-gui.exe)和 Visual Studio。本文先簡(jiǎn)單介紹使用 CMake + Visual Studio 的使用流程,然后以幾個(gè)例子介紹 CMake 相關(guān)知識(shí)。

CMake 使用流程

如果你還沒安裝 cmake,下載?https://cmake.org/files/v3.6/cmake-3.6.0-win64-x64.msi?(15 MB)安裝它。如果你還沒裝 VS,推薦使用?VS2015?社區(qū)版本,到?這里下載,選擇那個(gè) 3.7 GB 的。因?yàn)橐淮蜗螺d好,安裝起來很省心。如果你已經(jīng)有了 VS2010 或者 VS2013,也可以不安裝 VS2015。

下載第一份源碼?cpp.zip?(1.16 KB)。解壓進(jìn)入文件夾,打開 cmake-gui,把源碼和 cmake-gui 界面對(duì)半放。如下圖:

然后,

  • 把源碼根目錄的 CMakeLists.txt 拖動(dòng)到 cmake-gui 界面上

  • 修改輸出目錄(我通常都是添加?/build?)

  • 點(diǎn)擊 configure(配置),選擇【Visual Studio 14 VS2015 Win64】,點(diǎn)擊確定^[“Win64”是指的是編譯 VS2015 x64 工程,沒有“Win64”則為 x86 工程)。]

  • 點(diǎn)擊 generate(生成)

  • 最后,到輸出目錄,用 VS2015 打開?CPP.sln?工程。在 Solution Explorer 中右鍵單擊 CPP,然后【Set as StartUp Project】,然后?Ctrl?+?F5?運(yùn)行。

    相信你已經(jīng)看到了程序運(yùn)行結(jié)果,大概如下:

    0^2 ---> 0 0^2 ---> 0 2^2 ---> 4 3^2 ---> 9 4^2 ---> 16

    使用 CMake 的好處是,它可以生成 VS 工程,也可以生成 Linux 系統(tǒng)下常用的 Makefile工程,甚至還可以用 Qt creator 打開 CMakeLists.txt 文件,然后生成 qt 工程。^?參考我的教程:[HOWTO: Use Qt creator to Open CMakeLists.txt directly (will generate proper project files) · Issue #5 · district10/cmake-templates?,里面包含一個(gè) Linux 上的例子,一個(gè) Windows 上的例子。]這份代碼,在 Linux 上也可以迅速跑起來,這是我虛擬機(jī)中運(yùn)行的截圖:

    CMake 基礎(chǔ)

    簡(jiǎn)單的四行 CMakeLists.txt

    本小節(jié)源碼:?cmake-templates/cpp at master · district10/cmake-templates?。

    我們從根目錄的 CMakeLists.txt 看起,它簡(jiǎn)潔到只有 4 行!如下:

    project( CPP ) cmake_minimum_required( VERSION 2.6 ) file( GLOB SRCS *.c *.cpp *.cc *.h *.hpp ) add_executable( ${PROJECT_NAME} ${SRCS} )

    我們一行一行看,

    • 第一行,設(shè)置了工程名稱,叫“CPP”(所以后來生成的 VS 工程名為?CPP.sln);

    • 第二行,設(shè)置了 CMake 最低版本號(hào),通常在根目錄的 CMakeLists.txt 添加這個(gè)指定;

    • 第三行,把當(dāng)前文件夾下的源碼列表(文件后綴匹配的那些文件)存到變量 SRCS 中;

    • 第四行,把源碼編譯成一個(gè)二進(jìn)制這里的?${PROJECT_NAME}?就是?CPP?,是在第一行設(shè)置的。

    這就是一個(gè)基本的用 CMake 組織的 C++ 程序。只要四行配置,利用 CMake,我們就生成了 Windows 下的 VS 工程,還生成了 Linux 下的 Makefile 工程。只要四行!

    當(dāng)然還可以生成多個(gè)二進(jìn)制,如果你有多份源碼,比如

    add_executable( foo foo.cpp ) add_executable( bar bar.cpp )

    如果上面沒問題,還是這兩個(gè)代碼,我們?cè)?CMakeLists.txt 里去掉上面兩行,改成add_executable( foobar foo.cpp bar.cpp )?{.cmake},會(huì)不會(huì)有什么問題?

    生成靜態(tài)、動(dòng)態(tài)庫(kù)

    本小節(jié)源碼:?cmake-templates/modules at master · district10/cmake-templates。

    還可以用 CMake 生成鏈接庫(kù),可以是靜態(tài)庫(kù)(?.lib?),也可以是動(dòng)態(tài)庫(kù)(?.dll?),語(yǔ)法如下:

    add_library( 動(dòng)態(tài)鏈接庫(kù)名稱 SHARED 源碼列表 ) add_library( 靜態(tài)鏈接庫(kù)名稱 STATIC 源碼列表 )

    如果不指定 SHARED 或是 STATIC,默認(rèn)生成的是 STATIC,這個(gè)例子里,src 文件夾下生成了 3 個(gè)鏈接庫(kù),LibCubic 是“指定”生成的靜態(tài)庫(kù),LibExtras 是“指定”生成的動(dòng)態(tài)庫(kù),LibSquare 是“默認(rèn)”生成的靜態(tài)庫(kù)。

    生成庫(kù)文件就是為了讓人用,所以我們要把它鏈接給某個(gè)二進(jìn)制,語(yǔ)法如下:

    add_executable( 二進(jìn)制名 源碼列表 ) target_link_libraries( 二進(jìn)制名 動(dòng)靜態(tài)庫(kù)名 )

    生成庫(kù)的源碼有什么最基本的要求嗎?如果?add_executable( baz baz.cpp b.cpp a.cpp z.cpp )?{.cmake} 可以正確地生成二進(jìn)制文件 baz(windows 上就是 baz.exe),那這行 CMake 配置可以修改為?add_library( baz baz.cpp b.cpp a.cpp z.cpp )?{.cmake} 嗎?為什么。

    鏈接系統(tǒng)配置了的庫(kù)

    本小節(jié)源碼:?cmake-templates/opencv3 at master · district10/cmake-templates。

    CMake 的一個(gè)方便之處,便是添加第三方庫(kù)。在我的 CMake 安裝目錄(?C:\Program Files\CMake\share\cmake-3.6\Modules?)下,有多達(dá) 145 個(gè) FindX.cmake 文件,比如?FindQt4.cmake?。當(dāng)你在自己源碼中使用?find_package( Qt4 )時(shí),CMake 就會(huì)嘗試去引入?FindQt4.cmake?,這個(gè)文件引入后,特定的變量里就存儲(chǔ)了頭文件地址(?include_directories?)、鏈接庫(kù)地址(?link_directories)、鏈接庫(kù)的名稱以及一些開關(guān)配置(options)。

    本節(jié)用 OpenCV 來說明如何鏈接使用第三方庫(kù),這里用的是 opencv3。OpenCV3 官網(wǎng)提供的只有 VS2013 (vc12) 和 VS2015 (vc14) 的 prebuild,如果你使用 VS2012,你只能使用 OpenCV2(或者你要自己編譯 OpenCV3?)。OpenCV 的配置可以參考我寫得教程:?HOWTO: OpenCV 2 & OpenCV 3 · Issue #4 · district10/cmake-templates?。

    本節(jié)源碼的 CMakeLists.txt 里,我沒有使用?find_package( OpenCV REQUIRED )?,而是使用了?include( $ENV{OpenCV3_DIR}/OpenCVConfig.cmake )?,因?yàn)槲矣X得這是一種更好的解決方案,如此一來,你只要設(shè)置環(huán)境變量(%OpenCV3_DIR%),添加相應(yīng)目錄到 %PATH%,便可以同時(shí)使用 OpenCV2 和 OpenCV3(當(dāng)然是在不同的項(xiàng)目中)。上面的源碼鏈接中對(duì)此也有簡(jiǎn)要說明。

    看看我們的 CMakeLists.txt:

    project( OPENCV3 ) cmake_minimum_required( VERSION 2.8 )# find_package( OpenCV REQUIRED ) # 不使用 find_package include( $ENV{OpenCV3_DIR}/OpenCVConfig.cmake ) # 直接引入 cmake 文件message( STATUS "OpenCV library status:" ) # 輸出一下得到的變量 message( STATUS " version: ${OpenCV_VERSION}" ) message( STATUS " libraries: ${OpenCV_LIBS}" ) message( STATUS " include path: ${OpenCV_INCLUDE_DIRS}" ) include_directories( ${OpenCV_INCLUDE_DIRS} ) # 引入 OpenCV 頭文件目錄 add_executable( ${PROJECT_NAME} example.cpp ) target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} ) # exe 鏈接 OpenCV

    在我的系統(tǒng)下,輸出如下(我調(diào)整了換行):

    OpenCV ARCH: x64 OpenCV RUNTIME: vc14 OpenCV STATIC: ON Found OpenCV 3.1.0 in C:/OpenCV/opencv3/build/x64/vc14/lib You might need to add C:\OpenCV\opencv3\build\x64\vc14\bin to your PATH to be able to run your applications. OpenCV library status: version: 3.1.0 libraries: opencv_world;opencv_videostab;opencv_videoio;opencv_video; opencv_superres;opencv_stitching;opencv_shape;opencv_photo; opencv_objdetect;opencv_ml;opencv_imgproc;opencv_imgcodecs; opencv_highgui;opencv_flann;opencv_features2d;opencv_core;opencv_calib3d include path: C:/OpenCV/opencv3/build/include;C:/OpenCV/opencv3/build/include/opencv Configuring done

    很容易地,程序也運(yùn)行起來了。

    更多的了解

    只要掌握上面那基本的幾點(diǎn)(通俗地說,就是生成 exe、lib、dll,鏈接 lib、dll,引入第三方庫(kù)),然后積攢一些別人的 CMakeLists.txt 片段,CMake 便不難了。

    如果你還覺得 CMake 很麻煩,那一定是我博客寫得不好。如果你覺得 CMake 不好用,那不是我的錯(cuò),那是 CMake 的官方教程太垃圾導(dǎo)致的,我反正從來沒見過如此晦澀,一個(gè)例子都不給的教程。當(dāng)時(shí)寫?https://github.com/district10/cmake-templates/blob/master/qt4-project/CMakeLists.txt?的時(shí)候,我可是深受其苦。

    寫起來雖難,但用起來方便,所以……我大贊 CMake。

    想對(duì) CMake 有更多的了解,可以參考我的?district10/cmake-templates: Some CMake Templates. Qt, Boost, OpenCV, C++11, etc.?,里面有簡(jiǎn)單的 C 工程,C++ 工程,C++11 工程,Boost 庫(kù)的配置,OpenCV2、OpenCV3 的配置,Qt4、Qt5 的配置,等等。代碼在大多在 Windows + VS2010/VS2015 和 Linux + GCC4.8 測(cè)試通過。

    我還寫了一些庫(kù)的配置,不同平臺(tái)不同 IDE、編譯器上有關(guān) CMake 使用的教程:?Issues · district10/cmake-templates?。

    轉(zhuǎn)載于:https://www.cnblogs.com/zhehan54/p/5668285.html

    總結(jié)

    以上是生活随笔為你收集整理的【转载】CMake 简介和 CMake 模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。