精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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 下GCC的編譯

科技綠洲 ? 來(lái)源:矜辰所致 ? 作者:矜辰所致 ? 2023-09-11 15:18 ? 次閱讀

一、Linux 下多文件編譯

在上一篇 Linux 下的 C 編程我們知道了 Linux 下的編譯器為 GCC ,以及如何使用 GCC 進(jìn)行編譯,在文章我們講解 GCC 的編譯,使用的只使用了一個(gè) .c 文件,直接使用

gcc [目標(biāo)文件] -o [想要生產(chǎn)的文件名字]

那在遇到多個(gè) .c 文件的時(shí)候如何處理呢?

實(shí)際上還是使用上面這條指令,其中的 [目標(biāo)文件] 是可以為多個(gè)的。

舉一個(gè)簡(jiǎn)單的例子,我們寫(xiě)了三個(gè).c 文件,內(nèi)容如下:

圖片

編譯的方式如下圖:

圖片

這么看起來(lái)是不是感覺(jué)還算簡(jiǎn)單?但是我們可以試想一下,以后做項(xiàng)目的時(shí)候,成千上萬(wàn)個(gè)文件,怎么辦?

我們要考慮2個(gè)主要問(wèn)題:

1、 文件數(shù)量多起來(lái)了以后如何處理?

2、只修改了單個(gè)文件,如何只重新編譯修改過(guò)后的單個(gè)文件?

我們不可能和上面示例一樣手動(dòng)使用 gcc 命令輸入文件名的,而且文件多起來(lái)了,編譯時(shí)間需要很長(zhǎng),使用上面示例的命令,是會(huì)把所有的文件都重新編譯,在后面的 linux 學(xué)習(xí)開(kāi)發(fā)中,項(xiàng)目的編譯時(shí)間可比學(xué)習(xí) 51 、STM32 哪些工程的時(shí)候多得太多,每次都編譯所有文件這種行為肯定是不可取的。

在 Windows 下面我們有各種集成的 IDE 工具,往往只需要一個(gè)按鈕,就可以編譯整個(gè)工程,方便快捷,比如我們熟悉的 Keil,我們只需要點(diǎn)擊 IDE 工具欄目的一個(gè)按鈕,就可以完成我們想要的操作:

圖片

那么在 Linux 下,我們?cè)撊绾翁幚砟兀?/p>

這就要用到本文主要說(shuō)明的東西:Make 工具 和 Makefile 。

二、make 工具和 Makefile

首先我們要知道什么是 Make 工具,以及 什么 是 Makefile。

這部分的內(nèi)容時(shí)基本概念,類(lèi)似名詞解釋?zhuān)蠹矣涀【秃茫瑳](méi)有什么特別需要說(shuō)明的,因?yàn)槲覀兊闹攸c(diǎn)在于知道以及學(xué)會(huì)他們的使用.

2.1 make 和 Makefile 是什么?

make 工具:

make 本質(zhì)上它是一個(gè)程序,是一個(gè)編譯工具。我們?cè)诤竺孢M(jìn)行程序的時(shí)候,都需要使用 make 命令。

使用 make 工具我們可以自動(dòng)完成編譯工作,而且可以有效的處理我們上面提到的問(wèn)題:

  1. 多個(gè)文件的自動(dòng)編譯;
  2. 每次執(zhí)行 make 命令,只重新編譯修改后的文件;. 這里提一句,Linux 是如何判斷文件是否有修改:文件的修改時(shí)間!就是通過(guò) ls -l 查看的那個(gè)時(shí)間,make 會(huì)根據(jù)依賴(lài)關(guān)系,如果發(fā)現(xiàn)依賴(lài)的文件修改時(shí)間比自己新,那么久會(huì)重新編譯一下這個(gè)依賴(lài)文件)

利用 make 工具可以將大型的開(kāi)發(fā)項(xiàng)目分解成為多個(gè)更易于管理的模塊,可以簡(jiǎn)潔明快地理順各個(gè)源文件之間紛繁復(fù)雜的相互關(guān)系,大大簡(jiǎn)化開(kāi)發(fā)工作,避免不必要的重新編譯 。

make工具通過(guò)一個(gè)稱(chēng)為 Makefile 的文件來(lái)完成并自動(dòng)維護(hù)編譯工作,Makefile文件描述了整個(gè)工程的編譯、連接規(guī)則。

Makefile 文件:

Makefile 是一個(gè)文件,是一個(gè)描述一系列規(guī)則的文件。

Makefile 的 開(kāi)頭 M 要大寫(xiě)!(雖然有的地方說(shuō)大小寫(xiě)都可以,但是保證大寫(xiě),是肯定不會(huì)有莫名其妙的問(wèn)題的)。

make 會(huì)根據(jù) Makefile 文件的規(guī)則規(guī)則執(zhí)行命令,最后完成編譯輸出 。

在 Makefile 文件中:

  • 定義一系列的規(guī)則來(lái)制定源文件編譯后的先后順序
  • 特定的語(yǔ)法規(guī)則、支持函數(shù)定義、函數(shù)調(diào)用
  • 能直接集成操作系統(tǒng)中的命令

這是我們學(xué)習(xí) Linux 的一個(gè)重點(diǎn)對(duì)象,對(duì)于新手來(lái)說(shuō),至少要做到能夠看得懂,會(huì)一定程度的修改 Makefile 。

2.2 通過(guò) STM32 提前熟悉 Makefile

實(shí)際上 STM32 的開(kāi)發(fā),我們也可以用到 Make 工具和 Makefile,如果大家目前也在用 STM32 開(kāi)發(fā),不妨使用 GCC 工具鏈開(kāi)發(fā),這樣也能提前熟悉 Makefile 。

如果是我的粉絲朋友,一定知道現(xiàn)在我做 STM32 都是使用的 gcc 工具鏈,具體可查看文章:

拋棄IDE — 在window下使用VScode搭建ARM開(kāi)發(fā)環(huán)境

如果想看看簡(jiǎn)單的 Makefile ,大家可以寫(xiě)一個(gè)簡(jiǎn)單的 STM32 工程,然后在 STM32CubeMX 生成工程的時(shí)候選擇 Makefile ,如下圖:

圖片

然后打開(kāi)工程,就可以看看 ST 工具自動(dòng)生成的 Makefile 文件了,可以讓自己提前熟悉熟悉 Makefile:

圖片

2.3 GCC 與 make 的關(guān)系/區(qū)別?

經(jīng)常有小伙伴會(huì)被 GCC 與 make 工具搞得糊里糊涂,雖然知道怎么用,但是傻傻分不清楚或者是說(shuō)不明白。

看清楚概念:GCC 是編譯器,make 是一個(gè)命令工具。

感覺(jué)把概念一說(shuō)就清楚了啊, GCC 是一個(gè)編譯 C語(yǔ)言的編譯器, 而 make 是一個(gè)工具,他可以使得編譯工作簡(jiǎn)化,只不過(guò)我們使用的時(shí)候 make 會(huì)調(diào)用 GCC 編譯器去完成編譯工作。

在 Makefile 中我們會(huì)指定執(zhí)行編譯的編譯器類(lèi)型,而且會(huì)根據(jù)指定的編譯器類(lèi)型進(jìn)行對(duì)應(yīng)的命令操作,如下圖:

圖片

因?yàn)槲覀冊(cè)?linux 下使用的都是 gcc 編譯器,所以 Makefile 中的會(huì)看到我們熟悉的 gcc 的操作命令,我們只不過(guò)是利用 make 工具的自動(dòng)編譯去調(diào)用了 gcc 編譯器 對(duì)工程進(jìn)行編譯。

三、一個(gè)簡(jiǎn)單的 Makefile

上面說(shuō)過(guò),Makefile 是學(xué)習(xí) Linux 的一個(gè)要點(diǎn)之一,對(duì)于 Makefile 說(shuō)明,我會(huì)單獨(dú)分專(zhuān)欄進(jìn)行說(shuō)明介紹,那本文我們剛剛接觸,我們寫(xiě)一個(gè)簡(jiǎn)單的 Makefile 來(lái)編譯文章開(kāi)頭我們示例的3個(gè)文件。

直接先寫(xiě)一個(gè)傻瓜式的,看看 make 工具是否有用,在示例 .c 文件同目錄下,我們新建一個(gè) Makefile 文件,如下:

圖片

然后試著使用 make 命令看看效果:

圖片

OK,果然可以 make 直接編譯,但是上面這個(gè) Makefile 是有問(wèn)題的,因?yàn)槊看螆?zhí)行 make ,會(huì)把所有的 .c 文件都重新編譯器一次,實(shí)際使用也不可能這么寫(xiě)。

我們回憶一下上一篇課程的內(nèi)容,一個(gè)C 文件要經(jīng)過(guò)預(yù)處理、編譯、匯編 和 鏈接才能變成可執(zhí)行文件,由不同的 .c 文件生成到不同的 .o 文件,最終才將所有的 .o 文件鏈接成可執(zhí)行文件。

所以我們可分開(kāi)進(jìn)行,把每一個(gè) .c 先生成 .o 文件,然后再由 所有的 .o 文件生成 最終的文件,這樣如果單獨(dú)修改了某個(gè)文件 ,只需要把修改過(guò)的 .c 文件重新編譯就行了,所以我們的 Makefile 應(yīng)該這么寫(xiě):

圖片

make 的結(jié)果如下:

圖片

這樣寫(xiě)得好處就是,如果我們只對(duì)某一個(gè).c 文件進(jìn)行修改,他只會(huì)對(duì)修改過(guò)的文件進(jìn)行重新編譯,我們可以測(cè)試一下,比如我們修改一下 a.c 文件:

圖片

上面這個(gè)簡(jiǎn)單的 Makefile ,大家是不是已經(jīng)可以感覺(jué)到 make 工具的方便快捷了!

結(jié)語(yǔ)

本文向大家介紹了一下 Linux 編程時(shí)候使用的 make 工具,如何在沒(méi)有 IDE 工具的 Linux 環(huán)境下高效快捷的編譯工程,就靠 make 工具了。

當(dāng)然,我們的重點(diǎn)在于 Makefile,對(duì)于 Makefile 的寫(xiě)法規(guī)則,更多的內(nèi)容我會(huì)單獨(dú)寫(xiě)文章說(shuō)明的。

對(duì)于入門(mén)的小伙伴來(lái)說(shuō),也沒(méi)有必要一蹴而就,寫(xiě)好 Makefile 固然重要,但是對(duì)于現(xiàn)在一般的應(yīng)用開(kāi)發(fā)來(lái)說(shuō),Makefile 要完全自己從頭寫(xiě)得時(shí)候不多,很多時(shí)候可以找到一個(gè)可用的模板進(jìn)行修改,我們至少要做到可以看懂,可以去修改 Makefile!

聲明:本文內(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

    文章

    11225

    瀏覽量

    208911
  • GCC
    GCC
    +關(guān)注

    關(guān)注

    0

    文章

    105

    瀏覽量

    24820
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    561

    瀏覽量

    24695
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4304

    瀏覽量

    62427
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    653

    瀏覽量

    32806
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux編程】如何使用gcc編譯源代碼時(shí)輸出map文件?

    Linux編程】如何使用gcc編譯源代碼時(shí)輸出map文件?
    的頭像 發(fā)表于 08-15 14:08 ?8076次閱讀
    【<b class='flag-5'>Linux</b>編程】如何使用<b class='flag-5'>gcc</b><b class='flag-5'>編譯</b>源代碼時(shí)輸出map文件?

    Linuxgcc編譯過(guò)程介紹

    工作中,在Linux環(huán)境,有過(guò)量產(chǎn)項(xiàng)目的公司,gcc一般都是已經(jīng)安裝好了的。如果需要安裝,請(qǐng)從官網(wǎng)下載或網(wǎng)上找資源下載
    發(fā)表于 07-14 15:50 ?520次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>gcc</b><b class='flag-5'>編譯</b>過(guò)程介紹

    迅為龍芯2K1000開(kāi)發(fā)板Linuxgcc編譯

    gcc 全稱(chēng)(gnu compiler collection) 即編譯套件, gcc可以支持多種計(jì)算機(jī)體系結(jié)構(gòu), 比如 X86、 ARM 、MIPI .在12.2章節(jié)中我們?cè)趗buntu系統(tǒng)
    發(fā)表于 11-26 09:56

    Linux開(kāi)發(fā)環(huán)境的Arm gcc交叉編譯介紹

    需要以 Arm 指令集的標(biāo)準(zhǔn)編碼。為了讓這個(gè)流程變得簡(jiǎn)單,開(kāi)發(fā)者們?yōu)椴煌男酒_(kāi)發(fā)了不同的編譯器,比如針對(duì) Arm 平臺(tái)的 arm-linux-gcc,針對(duì) mips 平臺(tái)
    發(fā)表于 06-02 18:00

    Linux環(huán)境程序編譯

    1.GCC編譯 2.Make簡(jiǎn)介 3.常用編譯
    發(fā)表于 04-05 21:26 ?60次下載

    淺談gcc編譯

    3.3 gcc編譯器 GNU CC(簡(jiǎn)稱(chēng)為gcc)是GNU項(xiàng)目中符合ANSI C標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用C、C++和Object C等語(yǔ)言
    發(fā)表于 10-18 13:48 ?0次下載

    LinuxC/C++編譯gcc使用指南

    1.gcc包含的c/c++編譯gcc,cc與c++,g++ gcc和cc是一樣的,c++和g++是一樣的。一般c程序就用gcc
    發(fā)表于 11-02 10:59 ?0次下載

    Linux上安裝GCC3.4.0編譯器過(guò)程

    3.4.0比以前版本更好地支持了C++標(biāo)準(zhǔn)。本文以在Redhat Linux上安裝GCC3.4.0為例,介紹了GCC的安裝過(guò)程。 安裝之前,系統(tǒng)中必須要有cc或者gcc
    發(fā)表于 11-02 11:18 ?0次下載

    常見(jiàn)gcc編譯警告整理以及解決方法

     GCC有很多的編譯選項(xiàng),警告選項(xiàng);指定頭文件、庫(kù)路徑;優(yōu)化選項(xiàng)。本文針整理一GCC的警告選項(xiàng)以及gcc
    發(fā)表于 11-14 11:19 ?2.1w次閱讀

    Linux教程之如何對(duì)Linux系統(tǒng)gcc進(jìn)行編程的基本使用教程

    GCC是由GNU之父Stallman所開(kāi)發(fā)的linux編譯器,GCC最初的全名是GNU C Compiler,之后,隨著
    發(fā)表于 11-02 15:15 ?4次下載

    Linux開(kāi)發(fā)STM32 使用gcc-arm-none-eabi工具鏈編譯生成bin、hex文件

    Linux開(kāi)發(fā)STM32:使用gcc-arm-none-eabi工具鏈編譯生成bin、hex文件
    的頭像 發(fā)表于 02-28 15:08 ?1.1w次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b>開(kāi)發(fā)STM32 使用<b class='flag-5'>gcc</b>-arm-none-eabi工具鏈<b class='flag-5'>編譯</b>生成bin、hex文件

    gcc的使用方法以及Linux gcc 的常用選項(xiàng)

    gcc的使用方法 gcc 【選項(xiàng)】文件名 gcc常用選項(xiàng) gcc -v: 查看gcc編譯器的版本
    的頭像 發(fā)表于 10-22 14:42 ?3061次閱讀

    "Linux使用VSCode,GCC,OpenOCD實(shí)現(xiàn)STM32一鍵編譯燒錄調(diào)試(STM32CubeMX篇)"

    Linux使用VSCode開(kāi)發(fā)STM32開(kāi)發(fā)工具安裝Visual Studio Code與插件STM32CubeMXOpenOCD燒錄工具gcc-arm-none-eabi編譯
    發(fā)表于 12-06 09:36 ?7次下載
    "<b class='flag-5'>Linux</b><b class='flag-5'>下</b>使用VSCode,<b class='flag-5'>GCC</b>,OpenOCD實(shí)現(xiàn)STM32一鍵<b class='flag-5'>編譯</b>燒錄調(diào)試(STM32CubeMX篇)"

    Linux編程】如何使用gcc生成預(yù)編譯文件?

    Linux編程】如何使用gcc生成預(yù)編譯文件?
    的頭像 發(fā)表于 08-31 13:07 ?1924次閱讀
    【<b class='flag-5'>Linux</b>編程】如何使用<b class='flag-5'>gcc</b>生成預(yù)<b class='flag-5'>編譯</b>文件?

    Linux使用gcc編譯程序的語(yǔ)法

    01. 調(diào)試相關(guān)的宏 在Linux使用gcc編譯程序的時(shí)候,對(duì)于調(diào)試的語(yǔ)句還具有一些特殊的語(yǔ)法。 gcc編譯的過(guò)程中,會(huì)生成一些宏,可以使用
    的頭像 發(fā)表于 06-22 10:51 ?672次閱讀