国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用 Cmake 來搭建跨平臺(tái)的應(yīng)用程序框架:C語言版本

開發(fā) 后端
這種要求對(duì)于 Linux 系列的平臺(tái)來說,還是比較好處理的,大部分情況下只需要換一個(gè)交叉編譯工具鏈即可,涉及到硬件平臺(tái)相關(guān)部分再嵌入幾個(gè)內(nèi)聯(lián)匯編。
  • 一、前言
  • 二、示例代碼說明
  • 三、Linux 系統(tǒng)下操作步驟
  • 四、Widnows 系統(tǒng)下操作步驟
  • 五、總結(jié)

一、前言

我們?cè)趯憫?yīng)用程序的過程中,經(jīng)常需要面對(duì)一個(gè)開發(fā)場(chǎng)景:編寫跨平臺(tái)的應(yīng)用程序。

這種要求對(duì)于 Linux 系列的平臺(tái)來說,還是比較好處理的,大部分情況下只需要換一個(gè)交叉編譯工具鏈即可,涉及到硬件平臺(tái)相關(guān)部分再嵌入幾個(gè)內(nèi)聯(lián)匯編。

但是,對(duì)于 Windows 平臺(tái)來說,就稍微麻煩一些。你可能會(huì)說,在 Windows 平臺(tái)上用 cygwin, minGW 也可以統(tǒng)一編譯啊,但是你能指望客戶在安裝你的程序時(shí),還需要去部署兼容 Linux 的環(huán)境嗎?最好的解決方式,還是使用微軟自家的開發(fā)環(huán)境,比如VS等等。

之前,我曾經(jīng)在 B 站上傳一個(gè)類似的小視頻,用 C++ 來寫一個(gè)跨平臺(tái)的應(yīng)用程序結(jié)構(gòu)。后來有小伙伴希望提供一個(gè) C 語言版本的,于是有了這篇文章。

這篇文章,我們就以一個(gè)最簡(jiǎn)單的程序,來描述如何使用 cmake 這個(gè)構(gòu)建工具,來組織一個(gè)跨平臺(tái)的應(yīng)用程序框架。

閱讀這篇文章,您可以收獲下面幾個(gè)知識(shí)點(diǎn):

cmake 在編譯庫(kù)文件、應(yīng)用程序中的相關(guān)指令;

Windows 系統(tǒng)中的動(dòng)態(tài)庫(kù)導(dǎo)出、導(dǎo)入寫法;

如何利用宏定義來進(jìn)行跨平臺(tái)編程;

二、示例代碼說明

1. 功能描述

示例代碼的主要目的,是用來描述如何組織一個(gè)跨平臺(tái)的應(yīng)用程序結(jié)構(gòu)。它的功能比較簡(jiǎn)單,如下圖所示:

2. 文件結(jié)構(gòu)

  • Common:放置一些開源的第三方庫(kù),例如:網(wǎng)絡(luò)處理,json 格式解析等等;
  • Application: 應(yīng)用程序,使用 Utils生成的庫(kù);
  • Uitls:放置一些工具、助手函數(shù),例如:文件處理、字符串處理、平臺(tái)相關(guān)的助手函數(shù)等等,最后會(huì)編譯得到庫(kù)文件(動(dòng)態(tài)庫(kù) libUtils.so、靜態(tài)庫(kù) libUtils.a);
  • 如果擴(kuò)展其他模塊,可以按照 Utils 的文件結(jié)構(gòu)復(fù)制一個(gè)即可。

3. cmake 構(gòu)建步驟

在示例代碼根目錄下,有一個(gè)“總領(lǐng)” CMakeLists.txt 文件,主要用來設(shè)置編譯器、編譯選項(xiàng),然后去 include 其他文件夾中的 CMakeLists.txt 文件,如下:

4. Utils 目錄說明

這個(gè)目錄的編譯輸出是庫(kù)文件:

Linux 系統(tǒng):libUtils.so, libUtils.a;

Windows 系統(tǒng):libUtils.dll, libUtils.lib, libUtils.a;

其中的 CMakeLists.txt 文件內(nèi)容如下:

目前,代碼中只寫了一個(gè)最簡(jiǎn)單的函數(shù) getSystemTimestamp(),在可執(zhí)行應(yīng)用程序中,將會(huì)調(diào)用這個(gè)函數(shù)。

5. Application 目錄說明

這個(gè)目錄的編譯輸出是:一個(gè)可執(zhí)行程序,其中調(diào)用了 libUtils 庫(kù)中的函數(shù)。

CMakeLists.txt 文件內(nèi)容如下:

三、Linux 系統(tǒng)下操作步驟

1. 創(chuàng)建構(gòu)建目錄 build

  1. $ mkdir build 

在一個(gè)獨(dú)立的 build 目錄中編譯,生成的中間代碼不會(huì)污染源代碼,這樣對(duì)于使用 git 等版本管控工具來說非常的方便,在提交的時(shí)候只需要 ignore build 目錄即可,強(qiáng)烈推薦按照這樣的方式來處理。

2. 執(zhí)行 cmake,生成 Makefile

  1. $ cd build 
  2. $ cmake .. 

3. 編譯 Utils 庫(kù)

  1. $ cd Utils/src 
  2. $ make 

在 CMakeLists.txt 中的最后部分是安裝指令,把產(chǎn)生的庫(kù)文件和頭文件,安裝到源碼中的 install 目錄下。

  1. $ make install 

4. 編譯可執(zhí)行程序 Application

Application 使用到了 libUtils.so 庫(kù),因此需要手動(dòng)把 libUtils.so 和頭文件,復(fù)制到 Application 下面對(duì)應(yīng)的 lib/linux 和 include 目錄下。

當(dāng)然,也可以把這個(gè)操作寫在 Utils 的安裝命令里。

  1. $ cd build/Application/src 
  2. $ make 

執(zhí)行生成的可執(zhí)行程序 main,即可看到輸出結(jié)果。

四、Widnows 系統(tǒng)下操作步驟

1. 通過 cmake 指令生成 VS 工程

同樣的道理,新建一個(gè) build 目錄,然后在其中執(zhí)行 cmake .. 指令,生成 VS 解決方案,我使用的是 VS2019:

2. 編譯 Utils 庫(kù)文件

使用 VS2019 打開工程文件 DemoApp.sln,在右側(cè)的解決方案中,可以看到:

在 libUtils_shared 單擊右鍵,選擇【生成】:

此時(shí),在目錄 build\Utils\src\Debug 下面,可以看到生成的文件:

3. 編譯可執(zhí)行程序 Application

因?yàn)锳pplication需要使用 Utils 生成的庫(kù),因此,需要手動(dòng)把庫(kù)和頭文件復(fù)制到 Application 下面的 lib/win32 和 include 目錄下。

在 VS 解決方案窗口中,在 main 目標(biāo)上,單擊右鍵,選擇【生成】:

此時(shí),在目錄 build\Application\src\Debug 下可以看到生成的可執(zhí)行程序:

直接單擊 main.exe 執(zhí)行,報(bào)錯(cuò):

需要把 libUtils.dll 動(dòng)態(tài)庫(kù)文件復(fù)制到 main.exe 所在的目錄下,然后再執(zhí)行,即可成功。

五、總結(jié)

這篇文章的操作過程主要以動(dòng)態(tài)庫(kù)為主,如果編譯、使用靜態(tài)庫(kù),執(zhí)行過程是一樣一樣的。

如果操作過程有什么問題,歡迎留言、討論,謝謝!

在公眾號(hào)后臺(tái)留言【430】,可以收到示例代碼。在 Linux/Windows 系統(tǒng)中可以直接編譯、執(zhí)行,拿來即用。

 

祝您好運(yùn)!

 

責(zé)任編輯:武曉燕 來源: IOT物聯(lián)網(wǎng)小鎮(zhèn)
相關(guān)推薦

2021-05-07 08:00:19

應(yīng)用程序框架

2021-12-24 07:56:10

Cmake動(dòng)態(tài)庫(kù)應(yīng)用程序

2010-03-03 15:46:40

Android應(yīng)用程序

2023-09-22 09:41:28

LinuxC語言

2013-06-03 09:34:14

崩潰程序程序算法

2015-01-14 09:41:28

跨平臺(tái)移動(dòng)應(yīng)用Linux開發(fā)

2009-07-14 18:10:38

Swing應(yīng)用程序框架

2022-02-20 22:10:20

微服務(wù)框架gRPC

2015-01-06 13:42:45

跨平臺(tái)開發(fā)APP工具

2020-09-23 14:33:01

Golang桌面開發(fā)GUI

2009-08-28 16:43:08

AutoCAD托管C#

2011-03-22 14:12:17

LAMP

2010-01-19 15:18:12

C++語言

2013-11-19 15:35:01

2011-05-24 16:09:57

Androi

2024-09-06 10:46:04

2020-09-24 10:54:10

谷歌Flutter開發(fā)

2018-06-22 09:00:00

Java框架Pronghorn

2019-10-25 10:42:51

框架Web開發(fā)

2012-03-14 10:02:58

ibmdw
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产一区免费在线观看| 成人在线看片| 精品免费国产| 免费看男男www网站入口在线| 婷婷丁香激情网| 日韩精品成人| 久久亚区不卡日本| 日韩精品高清不卡| 56国语精品自产拍在线观看| 久久国产精品久久精品国产| 好了av在线| 亚洲人体偷拍| 欧美综合色免费| 久久99精品国产一区二区三区| 国产欧美一区二区精品久久久| 五月激情综合网| 激情伦成人综合小说| 欧美午夜精品一区二区三区电影| 精品成人在线视频| 精品福利一区二区三区免费视频| 在线观看亚洲视频啊啊啊啊| 国产h片在线观看| 高清不卡一二三区| 久久久免费电影| 九色网友自拍视频手机在线| 99亚洲精品| 色青青草原桃花久久综合 | 青青草视频在线观看| 国产精品v亚洲精品v日韩精品| 日韩一区二区影院| 亚洲 自拍 另类小说综合图区| 另类在线视频| 91.com视频| 最新真实国产在线视频| 久久亚洲精华国产精华液 | 国产精品美女| 色av中文字幕一区| 欧洲精品99毛片免费高清观看| 欧美激情图片区| 欧美jizzhd69巨大| 99在线精品观看| 97久久精品人人做人人爽50路| 少妇激情综合网| 日韩在线观看中文字幕| 国模精品系列视频| 久久综合99| 中文字幕在线成人| 亚州av中文字幕在线免费观看| 麻豆成人av在线| 国产97人人超碰caoprom| v片在线观看| 中文在线免费一区三区高中清不卡| 国产91视觉| 久久99国产精品尤物| 日韩免费观看视频| 国内精品久久久久久久影视蜜臀| 欧美系列一区| 国产精品成人av| 亚洲欧美国产精品va在线观看| 91成人福利在线观看| 成av人片一区二区| 九色综合婷婷综合| 白白色亚洲国产精品| 日本xxxx高清色视频| 国产成人激情av| 国产经典av| 成人激情免费电影网址| 四虎永久在线高清国产精品| 日韩高清国产一区在线| 欧美精品粉嫩高潮一区二区| 九九视频精品在线观看| 午夜精品久久久久久久蜜桃app | 色综合狠狠操| 九九九热精品免费视频观看网站| 八戒八戒神马在线电影| 中文字幕免费国产精品| 第一sis亚洲原创| 91手机视频在线| 一区二区日本视频| 99热亚洲精品| 欧美中文字幕久久| 在线观看欧美| 日韩成人xxxx| 久久免费看视频| 日韩精品久久久久| 成人3d精品动漫精品一二三| 亚洲国产精品影视| 欧美午夜视频在线观看| 毛片网站大全| 亚洲国产精品va| 麻豆影院在线观看| 成人97在线观看视频| 日韩漫画puputoon| 亚洲电影免费观看高清完整版在线观看 | jk破处视频在线| 亚洲人成在线电影| 午夜dj在线观看高清视频完整版| 日韩欧美国产成人| 欧美videos粗暴| 伊是香蕉大人久久| 性欧美18xxxhd| 欧美一级高清大全免费观看| 久久精品福利| www国产免费| 成人免费视频国产在线观看| 天堂一区二区三区| 日韩电影在线免费| 一本大道香蕉久在线播放29| 亚洲日本成人在线观看| 九九99九九精彩| 亚洲视频在线播放| 免费欧美日韩| 亚洲一区高清| 国产一区二区三区香蕉| 欧美国产视频一区| 国产精品白丝av| 鲁一鲁一鲁一鲁一澡| 国产午夜精品久久久久久久| 99热手机在线观看| 亚洲欧美日韩精品久久奇米色影视| 一个色综合网| 欧洲精品一区色| 高清国产福利在线观看| 国产精品美女视频| sm一区二区三区| 色综合久久88色综合天天6| 欧美猛烈性xbxbxbxb| 91久久精品国产91久久| 99pao成人国产永久免费视频| 欧美13~18sex性hd| 色欧美片视频在线观看在线视频| 亚洲日本伦理| 日本国产精品视频| 91一区二区三区四区| 97涩在线观看视频| 91av在线影院| 亚洲麻豆视频| 国产日韩精品在线看| 亚洲综合中文字幕在线| 麻豆精品视频在线观看免费| av香蕉成人| 欧美麻豆久久久久久中文| 懂色av一区二区三区蜜臀| 欧美大胆性生话| 欧美激情第一页xxx| 五月精品视频| 亚洲人成电影| julia一区二区中文久久94| 国产精品1区二区.| 蜜桃成人精品| 国产欧美日韩视频| 天堂午夜影视日韩欧美一区二区| 丰满爆乳一区二区三区| 精品视频在线观看网站| 久久久欧美一区二区| 欧美国产精品一区| 蜜桃a∨噜噜一区二区三区| 亚洲直播在线一区| 欧美图区在线视频| 国产精品毛片无码| 粉嫩精品一区二区三区在线观看| 色综合久久久久综合99| 久久尤物视频| 韩日精品一区| 免费高清成人| 国产精品永久入口久久久| 26uuu国产一区二区三区| 天堂成人在线| 欧美日韩一区二区三区在线观看免| 日韩精品在线免费播放| 欧美一区高清| 妺妺窝人体色www在线小说| 色悠久久久久综合欧美99| 99精品视频免费全部在线| 热色播在线视频| 国产伦精品一区二区三区免| 精品sm在线观看| 久久久久久久久久久99999| а√天堂8资源在线官网| 国产福利片一区二区| 精品少妇v888av| 91传媒视频在线播放| 极品少妇xxxx精品少妇| 精品视频二区| 一区二区免费在线观看| 777777777亚洲妇女| 欧美日韩亚洲国产综合| 怡红院av亚洲一区二区三区h| 欧美超级乱淫片喷水| 香蕉av777xxx色综合一区| 国产超碰精品| 老司机色在线视频| 日韩最新中文字幕| 欧美一卡二卡三卡| 日韩成人综合| 高清在线视频不卡| 99热在线网站| 久操网在线观看| 精品国产乱码久久久久久108| 九九久久综合网站|