日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
使用Cmake來(lái)搭建跨平臺(tái)的應(yīng)用程序框架:C語(yǔ)言版本
  • 一、前言
  • 二、示例代碼說(shuō)明
  • 三、Linux 系統(tǒng)下操作步驟
  • 四、Widnows 系統(tǒng)下操作步驟
  • 五、總結(jié)

一、前言

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

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),安義企業(yè)網(wǎng)站建設(shè),安義品牌網(wǎng)站建設(shè),網(wǎng)站定制,安義網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,安義網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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

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

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

這篇文章,我們就以一個(gè)最簡(jiǎn)單的程序,來(lái)描述如何使用 cmake 這個(gè)構(gòu)建工具,來(lái)組織一個(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)入寫(xiě)法;

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

二、示例代碼說(shuō)明

1. 功能描述

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

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

  • Common:放置一些開(kāi)源的第三方庫(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 文件,主要用來(lái)設(shè)置編譯器、編譯選項(xiàng),然后去 include 其他文件夾中的 CMakeLists.txt 文件,如下:

4. Utils 目錄說(shuō)明

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

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

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

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

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

5. Application 目錄說(shuō)明

這個(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 等版本管控工具來(lái)說(shuō)非常的方便,在提交的時(shí)候只需要 ignore build 目錄即可,強(qiáng)烈推薦按照這樣的方式來(lái)處理。

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è)操作寫(xiě)在 Utils 的安裝命令里。

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

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

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

1. 通過(guò) cmake 指令生成 VS 工程

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

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

使用 VS2019 打開(kāi)工程文件 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é)

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

如果操作過(guò)程有什么問(wèn)題,歡迎留言、討論,謝謝!

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

祝您好運(yùn)!


新聞名稱(chēng):使用Cmake來(lái)搭建跨平臺(tái)的應(yīng)用程序框架:C語(yǔ)言版本
本文地址:http://m.5511xx.com/article/djhidgc.html