衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux中CMake的使用3-不同目錄多個源文件

碼農愛學習 ? 來源:碼農愛學習 ? 作者:碼農愛學習 ? 2022-09-21 08:49 ? 次閱讀

上篇(Linux中CMake的使用2-同目錄下多個源文件)介紹了在同一目錄下有多個源文件時如何編寫CMakeLists.txt。

本篇繼續介紹不同目錄下有多個源文件時如何編寫CMakeLists.txt

1 有1個獨立文件夾

1.1 文件目錄結構

先來看下面這種情況,文件目錄結構如下,sum.c、sum.h和main.c的代碼內容見前面的文章。

pYYBAGMpxg6AHXY7AACrXL8Iwb4843.png

1.2 編寫CMakeLists.txt

對于這種情況,CMakeLists.txt可以有不同的寫法:

寫法1

首先看第一種寫法,如下:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

add_executable(sum_test main.c func/sum.c)

這里出現了1個新的命令:include_directories,用來指定頭文件的搜索路徑

寫法2

再來看第二種寫法,如下:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

aux_source_directory (func SRC_LIST)

add_executable(sum_test main.c ${SRC_LIST})

可以使用aux_source_directory,將指定目錄下的源文件列表存放到變量

1.3 編譯測試

在當前目錄執行cmake指令:

cmake .

cmake后面的點,用來告訴CMake工具在當前目錄中搜尋CMakeLists.txt文件。

自動生成makefile文件之后,再使用make指令編譯源碼:

make
poYBAGMpxhWAZ__WAAJAADxw9uw449.png

最后可以看到程序的運行結果。

2 有多個獨立文件夾(情況1)

2.1 文件目錄結構

再來看下面這種情況,文件目錄結構如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內容見前面的文章。

其中sum.c、sum.h、sub.c和sub.h放到func這個文件夾中:

poYBAGMpxhuALLX6AAC1ScxIdBY026.png

2.2 編寫CMakeLists.txt

注意CMakeLists.txt和之前的區別,其實它和上面的“寫法2”一樣:

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

include_directories (func)

aux_source_directory (func SRC_LIST)

add_executable(sum_sub_test main.c ${SRC_LIST})

2.3 編譯測試

按照之前的編譯測試流程進行編譯測試,結果如下:

pYYBAGMpxiCAKMKmAAKK0NUnPj0093.png

3 有多個獨立文件夾(情況2)

3.1 文件目錄結構

再來看下面這種情況,文件目錄結構如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內容見前面的文章。

其中sum.c和sum.h放到sumfunc這個文件夾中,sub.c和sub.h放到subfunc這個文件夾中:

此次兩種文件分布在兩個文件夾中:

poYBAGMpxiaANyQWAADZyBwT-N0796.png

3.2 編寫CMakeLists.txt

注意CMakeLists.txt和之前的區別:

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

include_directories (sumfunc subfunc)

aux_source_directory (sumfunc SRC_LIST1)
aux_source_directory (subfunc SRC_LIST2)

add_executable(sum_sub_test main.c ${SRC_LIST1} ${SRC_LIST2})

這里使用了兩個aux_source_directory,將兩個目錄下的源文件列表分別存放到不同的變量

3.3 編譯測試

按照之前的編譯測試流程進行編譯測試,結果如下:

pYYBAGMpxiyAdQFyAAJeH9Y16vY931.png

4 總結

本篇介紹了不同目錄下有多個源文件時如何編寫CMakeLists.txt。

pYYBAGMpxjGAWM-fAAZch3FOWZo591.png

對于不同文件夾下的多個源文件,主要是使用include_directories來添加頭文件的搜索目錄

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

add_executable(sum_test main.c func/sum.c)

另外,仍然可以借助aux_source_directory把指定目錄下的所有源文件存列表存放到變量中:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

aux_source_directory (func SRC_LIST)

add_executable(sum_test main.c ${SRC_LIST})

總的來說,一個新的知識點就是include_directories的使用。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210385
  • 源文件
    +關注

    關注

    0

    文章

    30

    瀏覽量

    4612
  • CMake
    +關注

    關注

    0

    文章

    28

    瀏覽量

    1306
收藏 人收藏

    評論

    相關推薦

    Linux的用戶與創建

    Linux的用戶與創建 用戶的類型 超級管理用戶: 權限最高的用戶(uid:0) #uid:是用戶的身份證號,Linux系統只認uid 普通用戶: 權限受限的用戶(uid:1000-60000
    的頭像 發表于 12-20 14:24 ?319次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>的用戶與創建

    Linux文件查找

    Linux文件查找 1.find查找概述 為什么要有文件查找,因為很多時候我們可能會忘了某個文件所在的位置,此時就需要通過find來查找。 find命令可以根據不同的條件來進行查找
    的頭像 發表于 12-03 17:09 ?352次閱讀

    Linux文件壓縮打包的各種姿勢

    1.文件打包與壓縮 1.什么是文件壓縮? 將多個文件目錄合并成為一個特殊的文件。比如: 搬家…
    的頭像 發表于 12-02 09:25 ?273次閱讀

    Linux文件系統的掛載過程

    Linux文件系統(rootfs)是Linux系統中所有其他文件系統和目錄的起點,它是內核啟動時掛載的第一個
    的頭像 發表于 10-05 16:50 ?515次閱讀

    如何構建Linux文件系統

    構建Linux文件系統是一個涉及多個步驟和概念的過程,它對于Linux系統的啟動和運行至關重要。
    的頭像 發表于 10-05 16:47 ?352次閱讀

    【米爾NXP i.MX 93開發板試用評測】3、NXP的MCU工程目錄結構和源碼分析

    環境無縫集成。 而NXP的項目工程,可以說是CMake工程的優秀示范。 目錄結構 這種目錄結構有助于提高軟件開發的效率和質量,特別是在大型項目和團隊合作的環境。通過合理的組織和模塊化
    發表于 09-21 21:11

    linux--sysfs文件系統

    sysfs文件系統 sysfs,全稱為System Filesystem,是一個由Linux內核實現的虛擬文件系統。它扮演著一個橋梁的角色,將內核的設備和驅動程序信息以
    的頭像 發表于 07-08 11:37 ?1001次閱讀
    <b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件</b>系統

    idf.py menuconfig的時候總是提示cmake301 error的原因?

    idf.py menuconfig的時候總是,提示cmake301 error 提示沒有這個目錄,手動創建目錄之后,還會出現更多依賴目錄 例: CM
    發表于 06-20 06:01

    鴻蒙開發文件管理:【@ohos.environment (目錄環境能力)】

    該模塊提供環境目錄能力,獲取內存存儲根目錄、公共文件目錄的JS接口。
    的頭像 發表于 06-13 10:27 ?607次閱讀
    鴻蒙開發<b class='flag-5'>文件</b>管理:【@ohos.environment (<b class='flag-5'>目錄</b>環境能力)】

    I.MX6ULL-飛凌 ElfBoard ELF1板卡 - 如何在Ubuntu編譯OpenCV庫(X86架構)

    opencv-3.4.1.tar.gz elf@ubuntu:~/work/opencv$ ls opencv-3.4.1opencv-3.4.1.tar.gz (4)在opencv目錄下新建兩個文件
    發表于 06-07 09:32

    嵌入式學習-飛凌ElfBoard ELF 1板卡 - 如何在Ubuntu編譯OpenCV庫

    opencv-3.4.1.tar.gz elf@ubuntu:~/work/opencv$ ls opencv-3.4.1opencv-3.4.1.tar.gz (4)在opencv目錄下新建兩個文件
    發表于 06-07 09:21

    VSCode編譯過程cmake錯誤的原因?

    VSCode編譯產生一個問題,問題如下: CMake Error at CMakeLists.txt:1 (idf_component_register):Unknown CMake command
    發表于 06-06 06:48

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN?

    arm-poky-linux-gnueabi.cmake將下面的內容添加到arm-poky-linux-gnueabi.cmake文件:set(
    發表于 05-29 17:24

    飛凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN

    arm-poky-linux-gnueabi.cmake 將下面的內容添加到arm-poky-linux-gnueabi.cmake文件:set(
    發表于 05-29 08:53

    請問一下CMake和Make之間的區別有哪些?

    CMake和Make是構建軟件,其工作涉及將源代碼轉換為可執行程序。CMake和Make是旨在實現構建過程自動化的工具,幫助開發者節省時間和精力。
    的頭像 發表于 02-27 11:44 ?1873次閱讀
    姚记百家乐的玩法技巧和规则| 百家乐官网下对子的概率| 百家乐如何稳赢| 明升| 罗马百家乐娱乐城| 华池县| 百家乐英皇娱乐网| 百家乐官网游戏平台架设| 温州百家乐的玩法技巧和规则 | 网上赌百家乐官网被抓应该怎么处理| 皇家百家乐的玩法技巧和规则| 赌场百家乐官网玩法介绍| 威尼斯人娱乐场28gxpjwnsr| 粤港澳百家乐官网娱乐场| 六合彩挂牌| 网页百家乐官网游戏下载| 时时博在线娱乐城| 新濠百家乐娱乐场| 巴西百家乐官网的玩法技巧和规则 | 泰来百家乐官网导航| 百家乐牌| 百家乐官网真人游戏娱乐| 皇家国际娱乐| 百家乐赌场程序| 百家乐官网高命中打法| 易胜博网址| 百家乐中P代表| 百家乐官网网上最好网站| 大发888娱乐场下载iypu rd| 阴宅24山吉凶| 固始县| 大发888 游戏下载| 百家乐真人投注网站| 赌场百家乐官网视频| 豪博| 七胜百家乐赌场娱乐网规则| 澳门百家乐官网路单| 百家乐官网庄的概率| 大发888在线娱乐城二十一点| 百家乐游戏怎么刷钱| 百家乐官网稳赢技法|