<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

Linux中CMake的使用2-同目錄下多個源文件

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

上篇文章(Linux中CMake的使用1-單個源文件)介紹了編寫CMakeLists.txt的最基礎用法——只有一個源文件的情況。

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

1 一組文件的情況

先來看下面這種情況:除了main.c以外,只多出來一組源文件(1個.c文件+1個.h文件)。

poYBAGMoc9eARppKAAA4ovF0T1w014.png

1.1 編寫C源文件

以一個簡單的兩數相加為例,代碼如下:

main.c

#include 
#include "sum.h"

int main(void)
{
    int a = 1;
    int b = 2;
    printf("a=%d, b=%d\n", a, b);
    printf("a+b=%d\n", sum(a, b));

    return 0;
}

sum.c

#include "sum.h"

int sum(int a, int b)
{
    return (a + b);
}

sum.h

#ifndef _SUM_H_
#define _SUM_H_

int sum(int a, int b);

#endif

1.2 編寫CMakeLists.txt

CMakeLists.txt的內容,和上一篇介紹的對單個文件進行編譯的情況基本一樣:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

add_executable(sum_test main.c sum.c)

注意,同個目錄有多個源文件,CMakeLists的主要區別是在add_executable繼續增加需要編譯的c文件。

1.3 編譯測試

在當前目錄執行cmake指令:

cmake .

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

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

make
pYYBAGMoc-GAeqh7AAJFgrAub0I598.png

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

2 多組文件的情況

再來看下面這種情況:除了main.c以外,還多出來兩組源文件(sum.c+sum.h、sub.c+sub.h)。

pYYBAGMoc-aAM6C7AAA_OhHDDoE561.png

2.1 編寫C源文件

測試代碼仍很簡單,sum的函數和上面一樣,sub函數以及main的代碼如下:

main.c

#include 
#include "sum.h"
#include "sub.h"

int main(void)
{
    int a = 1;
    int b = 2;
    printf("a=%d, b=%d\n", a, b);
    printf("a+b=%d\n", sum(a, b));
    printf("a-b=%d\n", sub(a, b));

    return 0;
}

sub.c

#include "sub.h"

int sub(int a, int b)
{
    return (a - b);
}

sub.h

#ifndef _SUB_H_
#define _SUB_H_

int sub(int a, int b);

#endif

注:sum.c和sum.h和之前的一樣

2.2 編寫CMakeLists.txt

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

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

aux_source_directory(. SRC_LIST)

add_executable(sum_sub_test main.c ${SRC_LIST})

這里使用aux_source_directory把當前目錄(.)下的所有源文件存列表存放到變量SRC_LIST

然后在add_executable里調用SRC_LIST,這樣,當有再多的源文件,CMakeLists也不需要改了

2.3 編譯測試

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

poYBAGMoc-6ABPbpAAKobE1gqsE604.png

3 總結

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

pYYBAGMoc_OAQTRAAAEX12D-JgM796.png

對于同個文件夾下有多個源文件,主要還是修改add_executable這句,將需要用到的C文件添加進去即可:

cmake_minimum_required (VERSION 2.8)

project (hello)

add_executable(sum_test main.c sum.c)

另外,還可以借助aux_source_directory把指定目錄下的所有源文件存列表存放到變量中,這樣就不受文件數量的影響:

aux_source_directory(. SRC_LIST)
add_executable(sum_sub_test main.c ${SRC_LIST})

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

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

    關注

    87

    文章

    11001

    瀏覽量

    206847
  • 源文件
    +關注

    關注

    0

    文章

    30

    瀏覽量

    4532
  • CMake
    +關注

    關注

    0

    文章

    28

    瀏覽量

    1220
收藏 人收藏

    評論

    相關推薦

    LinuxCMake的使用3-不同目錄多個源文件

    上篇(LinuxCMake的使用2-目錄下多個源文件)介紹了在同一
    的頭像 發表于 09-21 08:49 ?3159次閱讀
    <b class='flag-5'>Linux</b>中<b class='flag-5'>CMake</b>的使用3-不同<b class='flag-5'>目錄</b><b class='flag-5'>多個</b><b class='flag-5'>源文件</b>

    Linux目錄文件結構

    ,都可以在這個目錄下找到linux常用的命令。系統所需要的那些命令位于此目錄。/boot:Linux的內核及引導系統程序所需要的文件
    發表于 12-01 14:44

    LINUX目錄文件結構

    目錄下的共享庫。因此,千萬不要輕易對這個目錄進行什么操作,一旦發生問題,系統就不能工作了。/lost+found: 在ext2或ext3文件系統
    發表于 04-13 15:10

    keil自帶的ST例程添加自己的源文件和頭文件應該放到哪個目錄下

    用keil里的例程,修改寫GPIO流水燈的例程。直接在main()函數配置,是可以實現了;可是我做液晶顯示用自己的源文件和頭文件,應該放到哪個目錄下呢?比如說我的keil是裝在D盤的。我直接在D
    發表于 05-22 07:22

    Cmake構建linux工程的步驟

    一、Cmake構建linux工程列出本人在使用的cmake文件,用于構建工程,在cmake.txt文件
    發表于 12-16 07:16

    如何編譯多個源文件的代碼呢

    嵌入式Linux開發工具-工程管理器 make1.什么是工程/項目?(項目:多個源文件、資源文件構成的項目代碼)2.如何編譯
    發表于 12-21 08:11

    /OK8MM-linux-sdk的bsp源文件在哪里下載?

    /OK8MM-linux-sdk文件目錄下怎么沒有bsp源文件,或者不在這個目錄下?我想看一下自帶的gstreamer源碼
    發表于 12-31 07:28

    介紹一下如何基于cmake框架新建一個全新的項目

    和 CMakeLists.txt 文件即可目錄結構如下:CMakeLists.txt:在 main.c 編寫好相應的功能代碼后,在 bl_mcu_sdk 目錄下進行編譯即可,編譯命
    發表于 06-29 17:32

    JAVA教程之列出目錄下文件

    JAVA教程之列出目錄下文件,很好的JAVA的資料,快來學習吧
    發表于 04-11 17:28 ?5次下載

    Cmake學習的總結(三)

    在上一篇文Cmake文章里面,我們同樣在文章的最后面留了一個問題實現,就是把源文件放到src目錄下,把頭文件放到include目錄下去,這樣
    的頭像 發表于 12-24 17:45 ?469次閱讀

    嵌入式Linux開發之文件系統目錄結構介紹

    中。一、與windows區別Linux不像windows有盤符的概念,只有一個根目錄概念,所有文件系統(硬盤、U盤、CDROM、網絡文件系統)都以一個子
    發表于 11-01 16:31 ?3次下載
    嵌入式<b class='flag-5'>Linux</b>開發之<b class='flag-5'>文件</b>系統<b class='flag-5'>目錄</b>結構介紹

    CMake的實戰教程-2

    第一個問題,在運行`cmake .`后會產生很多垃圾文件,那么我們可以讓它在一個build目錄下去編譯,生成的垃圾文件放在這個目錄下就好了,
    的頭像 發表于 02-14 10:43 ?477次閱讀

    CMake實戰教程-2

    第一個問題,在運行`cmake .`后會產生很多垃圾文件,那么我們可以讓它在一個build目錄下去編譯,生成的垃圾文件放在這個目錄下就好了,
    的頭像 發表于 02-28 16:18 ?480次閱讀

    CMake構建后的項目結構解析

    Structure After CMake Build) CMake構建完成后,會在項目的根目錄下生成一個名為build的目錄。這個目錄
    的頭像 發表于 11-10 10:27 ?435次閱讀
    <b class='flag-5'>CMake</b>構建后的項目結構解析

    linux刪除文件命令rm

    Linux系統中,可以使用rm命令來刪除文件目錄。該命令的功能是刪除一個目錄中的一個或多個文件
    的頭像 發表于 11-13 16:42 ?453次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>