日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CMake入门(二)

發(fā)布時(shí)間:2025/3/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMake入门(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CMake入門(二)

最后更新日期:2014-04-25 by kagula

閱讀前提:《CMake入門(一)》、Linux的基本操作

環(huán)境: Windows 8.1 64bit英文版。Visual Studio 203 Update1英文版。CMake 2.8.12.2、 Cent OS 6.5。

?

內(nèi)容簡單介紹

???????? 介紹在VisualStudio上現(xiàn)有的項(xiàng)目怎樣移植到Linux上。本文通過列出兩個(gè)最簡單、也是最經(jīng)常使用的樣例來介紹Linux下CMake的使用。

?

CentOS 上安裝CMake 2.8.12.2

???????? 盡管在Cent OS 上直接能夠使用“yuminstall cmake”命令來安裝??墒前姹咎柼?#xff0c;我們須要在www.cmake.org上直接下載最新的CMake源碼來安裝

從官網(wǎng)下載cmake-2.8.12.2.tar.gz到“/usr/local”路徑下。輸入“tar -zxvf cmake-2.8.12.2.tar.gz”命令在當(dāng)前位置解壓縮,如今“/usr/local”路徑下新建了“cmake-2.8.12.2”文件夾,進(jìn)入文件夾。

安裝C語言和C++語言編譯器

#yum install gcc? gcc-c++??

配置

#./configure

編譯與鏈接

#make

安裝

#make install

CMake會把程序安裝到/local/host/bin下

執(zhí)行以下的命令查看CMake的當(dāng)前版本號,能夠看到已經(jīng)是2.8版本號了。

#cmake --version

?

在Linux上使用CMake的第一個(gè)樣例

???????? 在VisualStudio上新建項(xiàng)目CMake_Tutorial2,詳細(xì)過程例如以下 [Visual Studio]->[Visual C++]->[Win32]->[Win32 Project]打開向?qū)Т绑w,選擇[Applicationtype]為console application,選擇[Additional options]為Empty project后[Finish]。

???????? 新建Source.cpp源文件清單例如以下:

#include <stdio.h>extern void HelloWorld();int main(int args, wchar_t* argv[]) {HelloWorld();getchar();return 0; }新建MyLib.cpp源文件清單例如以下:

#include <iostream>using namespace std;void HelloWorld() { #ifdef WIN32wcout << L"Hello,World From Windows!" << endl; #elsewcout << L"Hello,World From Cent OS!" << endl; #endif }

加入CMakeLists.txt文件,源文件內(nèi)容例如以下:

#設(shè)置項(xiàng)目名稱 project(CMake_Tutorial2)#要求CMake的最低版本號為2.8 cmake_minimum_required(VERSION 2.8)#用于將當(dāng)前文件夾下的全部源文件的名字保存在變量 DIR_SRCS 中 aux_source_directory(. DIR_SRCS)#用于指定從一組源文件 source1 source2 … sourceN(在變量DIR_SRCS中定義) #編譯出一個(gè)可運(yùn)行文件且命名為CMake_Tutorial1 add_executable(CMake_Tutorial2 ${DIR_SRCS})

這次須要的三個(gè)文件都齊備了。Source.cpp是我們的主文件。MyLib.cpp文件模擬主文件所須要的函數(shù)實(shí)如今還有一個(gè)文件。畢竟再小的項(xiàng)目也非常少僅僅有一個(gè)cpp文件組成,CMakeLists.txt文件寫好后是給Cent OS上的CMake工具使用的。

???????? 如今按[F5],程序在Windows上正確運(yùn)行。

進(jìn)入項(xiàng)目的目錄中(...\CMake_Tutorial2\CMake_Tutorial2\)我們能夠看到

CMAKE_TUTORIAL2

│? CMakeLists.txt

│? CMake_Tutorial2.vcxproj

│?CMake_Tutorial2.vcxproj.filters

│? CMake_Tutorial2.vcxproj.user

│? MyLib.cpp

│? Source.cpp

└─Debug

六個(gè)文件一個(gè)Debug目錄,當(dāng)中僅僅有CMakeLists.txtMyLib.cpp、Source.cpp三個(gè)文件才是我們在Linux上編譯出可運(yùn)行程序所須要的,可是為了方便我們把“CMake_Tutorial2”整個(gè)目錄上傳到linux系統(tǒng)上。

???????? [S1]我把文件夾上傳到CentOS操作系統(tǒng)的/home/kagula/Downloads文件夾下,[S2]在控制臺下輸入“cd? CMake_Tutorial2”命令,在當(dāng)前文件夾我們能夠看到原來在Windows系統(tǒng)下的六個(gè)文件和一個(gè)Debug文件夾。

????????

基本操作流程為:

  • $> cmake directory
  • $> make
  • [S3]在當(dāng)前文件夾下使用“mkdir build”命令建立build文件夾。

    [S4]“cd build”。

    [S5]“cmake ..”命令在當(dāng)前文件夾(Build文件夾)生成Makefile文件?!?.”參數(shù)指示CMake工具,CMakeLists.txt文件在父文件夾中。

    [S6]輸入“make”命令后,進(jìn)行編譯鏈接,在當(dāng)前文件夾生成CMake_Tutorial2可運(yùn)行程序,

    [S7]輸入“./CMake_Tutorial2”,程序執(zhí)行并輸出“Hello,WorldFrom Cent OS!”字符串。輸入隨意字符后敲回車,程序結(jié)束執(zhí)行。

    ?

    ?

    在Linux上使用CMake的第二個(gè)樣例

    這個(gè)樣例相對于上面一個(gè)

    [1]添加了分布在不同文件夾的源文件。

    ???????? 現(xiàn)實(shí)世界中多個(gè)C++源文件會分布在不同的文件夾中,這個(gè)樣例模擬了這樣的情況。

    [2]宏的定義。

    ???????? 在Win上跑的程序,不一定在Linux上也能順利跑。所以有時(shí)候須要在程序中依據(jù)_DEBUG宏的定義輸出程序執(zhí)行狀態(tài)。

    這里的難點(diǎn)是CMakeLists.txt文件的編輯

    在Visual Studio上建立Win32 控制臺項(xiàng)目CMake_Tutorial2_2, 經(jīng)調(diào)試能夠執(zhí)行后,再把CMake_Tutorial2_2整個(gè)project文件夾上傳到Cent OS上。在Cent OS上做測試的時(shí)候我把它放在了/home/kagula/Downloads/CMake_Tutorial2_2/中。

    源文件文件夾結(jié)構(gòu)例如以下。

    CMAKE_TUTORIAL2_2

    │?CMakeLists.txt

    │?CMake_Tutorial2_2.vcxproj

    │?CMake_Tutorial2_2.vcxproj.filters

    ├─Debug

    │? │? CMake_Tutorial2_2.log

    │? │? FromMyLib1.obj

    │? │? FromMyLib2.obj

    │? │? Source.obj

    │? │? vc120.idb

    │? │? vc120.pdb

    │? │

    │? └─CMake_Tu.3A7B3807.tlog

    │?????????cl.command.1.tlog

    │?????????CL.read.1.tlog

    │?????????CL.write.1.tlog

    │?????????CMake_Tutorial2_2.lastbuildstate

    │?????????link.command.1.tlog

    │?????????link.read.1.tlog

    │?????????link.write.1.tlog

    ├─MyLib1

    │?????CMakeLists.txt

    │?????FromMyLib1.cpp

    │?????FromMyLib1.h

    └─src

    ???????CMakeLists.txt

    ???????Source.cpp

    能夠看到每一個(gè)含源碼的目錄中必須有一個(gè)CMakeLists.txt文件。所以這里共同擁有三個(gè)CMakeLists.txt文件。

    CMakeLists.txt源文件清單

    #指定可運(yùn)行程序輸出路徑為運(yùn)行cmake時(shí)路徑的bin子路徑 #默認(rèn)是輸出到運(yùn)行cmake命令時(shí)的路徑 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)#CMake運(yùn)行時(shí),打印路徑 MESSAGE(${PROJECT_SOURCE_DIR}/MyLib1) #加入頭文件搜索路徑 INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/MyLib1)#加入庫文件搜索路徑 LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/lib)#用于將當(dāng)前文件夾下的全部源文件的名字保存在變量 APP_SRC 中 AUX_SOURCE_DIRECTORY(. APP_SRC)#假設(shè)調(diào)用"CMake -D DEBUG_MODE=ON .." #則為C++源文件設(shè)置_DEBUG宏 IF(DEBUG_MODE)ADD_DEFINITIONS(-D_DEBUG) ENDIF()#用于指定從一組源文件 source1 source2 … sourceN(在變量APP_SRC中定義) #編譯出一個(gè)可運(yùn)行文件且命名為CMake_Tutorial2_2 ADD_EXECUTABLE(CMake_Tutorial2_2 ${APP_SRC})#加入編譯可運(yùn)行程序所須要的鏈接庫、假設(shè)有多個(gè)中間用空格隔開 #第一個(gè)參數(shù)是可運(yùn)行程序名稱,第二個(gè)開始是依賴庫 #在這里依據(jù)名字mylib1去尋找libmylib1.a文件(Linux下的C++靜態(tài)庫文件) TARGET_LINK_LIBRARIES(CMake_Tutorial2_2 mylib1)

    如今進(jìn)入到Cent OS系統(tǒng)下

    使用以下的命令

    $pwd

    顯示當(dāng)前路徑為“/home/kagula/Downloads/CMake_Tutorial2_2/”

    $mkdir build

    $cd build

    $cmake ..

    調(diào)用cmake處理上一級文件夾的CMakeLists.txt文件,生成Makefile文件。

    $make

    當(dāng)前文件夾會生成lib子文件夾。存放libmylib1.a靜態(tài)庫文件。生成bin子文件夾存放CMake_Tutorial2_2可運(yùn)行文件,進(jìn)入bin子文件夾可直接運(yùn)行CMake_Tutorial2_2可運(yùn)行程序。

    ?

    假設(shè)要啟用_DEBUG宏

    使用以下的命令取代“cmake? ..”

    $cmake -D DEBUG_MODE=on? ..

    ?

    以下給出當(dāng)前實(shí)例用到的三個(gè)C++源文件清單

    FromMyLIb1.h源代碼清單

    #ifndef _FROMMYLIB1_H_ #define _FROMMYLIB1_H_void FromMyLib1Func();#endif

    FromMyLIb1.cpp源代碼清單

    #include "FromMyLib1.h" #include <iostream>using namespace std;void FromMyLib1Func() {wcout << L"The function from MyLib1 directory!" << endl; }

    Source.cpp源代碼清單

    #include <stdio.h> #include <iostream>#ifdef WIN32 #include "..\MyLib1\FromMyLib1.h" #else #include "../MyLib1/FromMyLib1.h" #endifusing namespace std;int main(int argc, wchar_t** argv) { #ifdef _DEBUGwcout << L"App in Debug Mode" << endl; #elsewcout << L"Release Mode" << endl; #endifFromMyLib1Func();getchar();return 0; }

    假設(shè)。改動(dòng)了項(xiàng)目的源碼

    清除生成的2進(jìn)制代碼

    $make clean

    又一次編譯

    $make

    ?

    ?

    假設(shè),改動(dòng)了CMakeLists.txt文件

    須要又一次調(diào)用cmake命令

    ?

    ???????? boost庫含有編寫C++應(yīng)用程序所須要的非常多基本API。

    ???????? 下一篇介紹含boost調(diào)用的Win32控制臺項(xiàng)目。怎樣借助cmake工具把依賴boost的項(xiàng)目移植到Cent ?OS系統(tǒng)上執(zhí)行。???

    參考資料

    [1]《CMake使用入門》

    http://jiyeqian.is-programmer.com/2011/7/4/cmake_tutorial.27813.html

    [2]《makefile: CMAKE的使用》-介紹CMake使用過程中的常見問題

    http://blog.chinaunix.net/uid-23381466-id-3826931.html


    總結(jié)

    以上是生活随笔為你收集整理的CMake入门(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 精品国产一区二区三区噜噜噜 | 色就是色av | 精品国产91久久久久久 | 蜜桃中文字幕 | 蜜桃av在线免费观看 | 美女黄色片网站 | 日本免费网站视频 | 麻豆毛片| 色婷婷av久久久久久久 | 国产综合激情 | 男人爽女人下面动态图 | 午夜福利电影一区 | 日韩成人免费av | 国产中文字幕在线视频 | 99色亚洲 | 欧美在线视频一区二区 | 亚洲国产综合网 | 播播成人网 | 青草精品| 91在线观看视频网站 | 亚洲中文字幕第一区 | 亚洲色图激情小说 | 久久久久国产精品一区二区 | 国外av在线 | 色小姐综合| 日韩有码在线观看 | 91精品在线免费 | 91视频毛片| 亚洲欧美视频二区 | 国产一级淫片a视频免费观看 | 日日夜夜撸啊撸 | 欧美香蕉视频 | 狠狠干狠狠撸 | 亚洲激情在线播放 | 任你躁av一区二区三区 | 日韩色综合网 | 做视频| 天堂在线亚洲 | 国产91丝袜在线播放九色 | 超碰在线c | 成人国产a | 国产精品久久久久免费 | 黄片毛片av| 日本加勒比一区 | 国产a√精品区二区三区四区 | 欧美精品自拍偷拍 | 欧美资源在线观看 | 欧美天天影院 | 国产网站在线免费观看 | 性欧美hd调教 | 亚洲久操| 91女人18毛片水多国产 | 午夜影院0606 | 亚洲无码精品一区二区三区 | 伊人中文在线 | 亚洲论理 | 手机免费在线观看av | 国产一区二区三区免费视频 | 精品一区二区三区在线观看视频 | 婷婷激情在线 | 精品中文字幕视频 | 少妇特黄a一区二区三区88av | 伊人久久久久噜噜噜亚洲熟女综合 | 自拍毛片 | 国产欧美精品aaaaaa片 | 麻豆久久久久 | 又色又爽又黄无遮挡的免费视频 | 干干干日日日 | 亚洲第一成肉网 | 国产在线观看99 | 越南黄色一级片 | 黄色网页在线 | 日韩电影一区二区在线观看 | av在线不卡网 | 日本人妻不卡一区二区三区中文字幕 | 亚洲图片一区 | 国产欧美一区二 | 我和岳m愉情xxxⅹ视频 | 貂蝉被到爽流白浆在线观看 | 奇米精品一区二区三区在线观看 | 国产成人啪精品午夜在线观看 | 视频在线国产 | 桃色视频在线 | 午夜一级黄色片 | 成人一区二区视频 | 亚洲图片在线观看 | 99精品成人 | 亚洲最大av | 免费成人在线观看视频 | 亚洲字幕在线观看 | 亚洲视频久久 | 亚洲av无码国产精品久久不卡 | 高清av免费观看 | 国产在线网 | 韩国一区二区三区视频 | 日本五十路女优 | 国产老女人乱淫免费可以 | 欧美丝袜脚交 | 日本视频精品 |