訂閱
糾錯(cuò)
加入自媒體

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

一、前言

我們?cè)趯?xiě)應(yīng)用程序的過(guò)程中,經(jīng)常需要面對(duì)一個(gè)開(kāi)發(fā)場(chǎng)景:編寫(xiě)跨平臺(tái)的應(yī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)一編譯啊,但是你能指望客戶在安裝你的程序時(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(chǎn));

如果擴(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(chǎn);

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

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

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

1  2  下一頁(yè)>  
聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

    掃碼關(guān)注公眾號(hào)
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號(hào)