0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

碼農(nóng)愛(ài)學(xué)習(xí) ? 來(lái)源:碼農(nóng)愛(ài)學(xué)習(xí) ? 作者:碼農(nóng)愛(ài)學(xué)習(xí) ? 2022-09-20 08:57 ? 次閱讀

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

本篇繼續(xù)介紹,在同一目錄下有多個(gè)源文件時(shí)如何編寫(xiě)CMakeLists.txt。

1 一組文件的情況

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

poYBAGMoc9eARppKAAA4ovF0T1w014.png

1.1 編寫(xiě)C源文件

以一個(gè)簡(jiǎn)單的兩數(shù)相加為例,代碼如下:

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 編寫(xiě)CMakeLists.txt

CMakeLists.txt的內(nèi)容,和上一篇介紹的對(duì)單個(gè)文件進(jìn)行編譯的情況基本一樣:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

add_executable(sum_test main.c sum.c)

注意,同個(gè)目錄有多個(gè)源文件,CMakeLists的主要區(qū)別是在add_executable繼續(xù)增加需要編譯的c文件。

1.3 編譯測(cè)試

在當(dāng)前目錄執(zhí)行cmake指令:

cmake .

cmake后面的點(diǎn),用來(lái)告訴CMake工具在當(dāng)前目錄中搜尋CMakeLists.txt文件。

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

make
pYYBAGMoc-GAeqh7AAJFgrAub0I598.png

最后可以看到程序的運(yùn)行結(jié)果。

2 多組文件的情況

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

pYYBAGMoc-aAM6C7AAA_OhHDDoE561.png

2.1 編寫(xiě)C源文件

測(cè)試代碼仍很簡(jiǎn)單,sum的函數(shù)和上面一樣,sub函數(shù)以及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 編寫(xiě)CMakeLists.txt

注意CMakeLists.txt和之前的區(qū)別:

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把當(dāng)前目錄(.)下的所有源文件存列表存放到變量SRC_LIST

然后在add_executable里調(diào)用SRC_LIST,這樣,當(dāng)有再多的源文件,CMakeLists也不需要改了

2.3 編譯測(cè)試

按照之前的編譯測(cè)試流程進(jìn)行編譯測(cè)試,結(jié)果如下:

poYBAGMoc-6ABPbpAAKobE1gqsE604.png

3 總結(jié)

本篇介紹了同一目錄下有多個(gè)源文件時(shí)如何編寫(xiě)CMakeLists.txt。

pYYBAGMoc_OAQTRAAAEX12D-JgM796.png

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

cmake_minimum_required (VERSION 2.8)

project (hello)

add_executable(sum_test main.c sum.c)

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

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

總的來(lái)說(shuō),一個(gè)新的知識(shí)點(diǎn)就是aux_source_directory的使用。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209476
  • 源文件
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    4586
  • CMake
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    1273
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LinuxCMake的使用3-不同目錄多個(gè)源文件

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

    Linux目錄文件結(jié)構(gòu)

    ,都可以在這個(gè)目錄下找到linux常用的命令。系統(tǒng)所需要的那些命令位于此目錄。/boot:Linux的內(nèi)核及引導(dǎo)系統(tǒng)程序所需要的文件
    發(fā)表于 12-01 14:44

    LINUX目錄文件結(jié)構(gòu)

    目錄下的共享庫(kù)。因此,千萬(wàn)不要輕易對(duì)這個(gè)目錄進(jìn)行什么操作,一旦發(fā)生問(wèn)題,系統(tǒng)就不能工作了。/lost+found: 在ext2或ext3文件系統(tǒng)
    發(fā)表于 04-13 15:10

    如何編譯多個(gè)源文件的代碼呢

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

    介紹一下如何基于cmake框架新建一個(gè)全新的項(xiàng)目

    和 CMakeLists.txt 文件即可目錄結(jié)構(gòu)如下:CMakeLists.txt:在 main.c 編寫(xiě)好相應(yīng)的功能代碼后,在 bl_mcu_sdk 目錄下進(jìn)行編譯即可,編譯命
    發(fā)表于 06-29 17:32

    Linux改變文件目錄的訪問(wèn)權(quán)限命令

    Linux改變文件目錄的訪問(wèn)權(quán)限命令 Linux改變文件目錄的訪問(wèn)權(quán)限命令  
    發(fā)表于 01-18 12:46 ?1201次閱讀

    Delphi教程之實(shí)現(xiàn)指定目錄下文件查詢(xún)

    Delphi教程之實(shí)現(xiàn)指定目錄下文件查詢(xún),很好的Delphi資料,快來(lái)下載學(xué)習(xí)吧
    發(fā)表于 04-11 16:09 ?6次下載

    JAVA教程之列出目錄下文件

    JAVA教程之列出目錄下文件,很好的JAVA的資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?5次下載

    Cmake學(xué)習(xí)的總結(jié)(三)

    在上一篇文Cmake文章里面,我們同樣在文章的最后面留了一個(gè)問(wèn)題實(shí)現(xiàn),就是把源文件放到src目錄下,把頭文件放到include目錄下去,這樣
    的頭像 發(fā)表于 12-24 17:45 ?578次閱讀

    嵌入式Linux開(kāi)發(fā)之文件系統(tǒng)目錄結(jié)構(gòu)介紹

    前言Linux文件系統(tǒng),顧名思義:文件是數(shù)據(jù)的集合,文件系統(tǒng)不僅包含著文件的數(shù)據(jù)而且還有
    發(fā)表于 11-01 16:31 ?3次下載
    嵌入式<b class='flag-5'>Linux</b>開(kāi)發(fā)之<b class='flag-5'>文件</b>系統(tǒng)<b class='flag-5'>目錄</b>結(jié)構(gòu)介紹

    CMake的實(shí)戰(zhàn)教程-2

    第一個(gè)問(wèn)題,在運(yùn)行`cmake .`后會(huì)產(chǎn)生很多垃圾文件,那么我們可以讓它在一個(gè)build目錄下去編譯,生成的垃圾文件放在這個(gè)目錄下就好了,
    的頭像 發(fā)表于 02-14 10:43 ?679次閱讀

    CMake實(shí)戰(zhàn)教程-2

    第一個(gè)問(wèn)題,在運(yùn)行`cmake .`后會(huì)產(chǎn)生很多垃圾文件,那么我們可以讓它在一個(gè)build目錄下去編譯,生成的垃圾文件放在這個(gè)目錄下就好了,
    的頭像 發(fā)表于 02-28 16:18 ?743次閱讀

    如何將linux下多種類(lèi)型的多個(gè)文件復(fù)制到另一個(gè)目錄

    即假如/haodao1目錄下存在test1.txt、test2.c、test3.java、test4.py、test5.sql這五種不同類(lèi)型的不同文件,如何將.txt、.c、.java、.py這些
    發(fā)表于 06-09 15:44 ?993次閱讀

    CMake構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析

    Structure After CMake Build) CMake構(gòu)建完成后,會(huì)在項(xiàng)目的根目錄下生成一個(gè)名為build的目錄。這個(gè)目錄
    的頭像 發(fā)表于 11-10 10:27 ?2075次閱讀
    <b class='flag-5'>CMake</b>構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析

    linux刪除文件命令rm

    Linux系統(tǒng),可以使用rm命令來(lái)刪除文件目錄。該命令的功能是刪除一個(gè)目錄的一個(gè)或
    的頭像 發(fā)表于 11-13 16:42 ?946次閱讀