日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Eclipse进行Makefile项目

發(fā)布時間:2024/7/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Eclipse进行Makefile项目 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在MCU on Eclipse網(wǎng)站上看到Erich Styger所寫的一篇有關(guān)在Eclipse中使用Makefile創(chuàng)建項目的文章,文章講解清晰明了非常不錯,所以呢沒人將其翻譯過來供各位同仁參考。當(dāng)然限于個人水平,有不當(dāng)之處懇請指正。原文網(wǎng)址:https://mcuoneclipse.com/2017/07/22/tutorial-makefile-projects-with-eclipse/

?

像Eclipse這樣的IDE的好處是它使得處理項目的工作變得非常容易。因為它不但可以生成文件,而且可以獲取并自動地管理Makefile文件。但有時這可能不是我想要的,因為我需要更大的靈活性和控制,或者我想要為我的持續(xù)集成和自動化測試系統(tǒng)使用相同的制作文件。在這種情況下,就需要自己編寫Makefile文件。

有一件事不排除其他內(nèi)容:本文介紹如何使用Eclipse中的makefiles與Eclipse中托管構(gòu)建系統(tǒng)相似的舒適度,但是具有無限制的make files:

概要

Eclipse附帶一個內(nèi)置的構(gòu)建系統(tǒng)(managed make):我可以配置編譯器鏈接器設(shè)置,Eclipse會處理其余的事情。在本教程中,我將介紹如何使用Eclipse手動創(chuàng)建和使用精心制作的make files。所推薦的make files和模板可以方便地使用make來控制構(gòu)建系統(tǒng)。所提出的方法要求添加到項目中的每個新的源文件需要擴(kuò)展make文件,而是對所有包含的頭文件的自動生成依賴文件的make文件進(jìn)行擴(kuò)展。

使用make文件的好處是:

  • 比Eclipse .cproject文件和設(shè)置更容易在版本控制系統(tǒng)中存儲和跟蹤
  • 完全控制構(gòu)建和制作過程
  • 作為構(gòu)建過程的一部分,與其他步驟(例如使用版本控制系統(tǒng)或自動化測試系統(tǒng))相比,這是微不足道的
  • 可以在IDE和外部使用相同的構(gòu)建(make)(例如在自動構(gòu)建系統(tǒng)上)
  • 并且編寫make文件也很有趣

make文件方法需要了解構(gòu)建過程,為此,了解什么與管理make一起使用是有幫助的,所以我可以將其用作基礎(chǔ)或靈感。

前提條件

要在Eclipse中使用make文件,我需要以下內(nèi)容:

  • Eclipse IDE。我正在使用恩智浦MCUXpresso IDE v10.0.2(基于Neon),但任何其他Eclipse發(fā)行版也可以這樣做。

  • 使用make實用程序安裝GNU工具鏈。通常這里附帶了一個捆綁的Eclipse IDE,或者您可以使用DIY工具鏈。

  • 您的目標(biāo)設(shè)備的編譯器和鏈接器設(shè)置。使用現(xiàn)有示例項目中的選項。

  • 啟動和鏈接器文件。再次,您可以借用現(xiàn)有的示例項目。

  • 應(yīng)用源文件。我建議先從“空”main函數(shù)開始。

獲取必要的文件和選項的一個好方法是查看一個通常使用“manged make”的示例項目。

我把這個項目的來源放在了GitHub上。在本文末尾的“鏈接”部分,檢查GitHub項目的鏈接。

來自Eclipse受托管Make

使用受管制作系統(tǒng),Eclipse會檢測項目中存在的文件(例如* .c)并自動生成make文件:

生成器設(shè)置

這樣生成make文件:

生成Make文件

通過構(gòu)建工具集成,我有一個GUI可以設(shè)置工具的選項:

管理構(gòu)建工具設(shè)置

所有這些信息都將添加到make文件中,如果我做一個構(gòu)建,它調(diào)用make實用程序(或構(gòu)建器)使用所有必要的命令行構(gòu)建它。檢查控制臺視圖輸出可以看到它有什么作用

控制臺視圖輸出

有了這個,我應(yīng)該有一切做一個make文件項目。

創(chuàng)建Make File項目

我在Eclipse中創(chuàng)建一個新的make文件項目,菜單File> New Project:

新項目

與Eclipse中的許多事情一樣,有多種方法來做事情。

如果我有現(xiàn)有的代碼,我可以使用'Makefile項目與現(xiàn)有代碼'。然后我可以給一個名字和現(xiàn)有的代碼位置(文件夾)。然后,它將在該代碼位置文件夾內(nèi)創(chuàng)建項目,并將所有源文件添加到項目中:

新建帶已有代碼的Make文件項目

通用的方法是生成C或C ++項目:

新的C/C++項目

然后給項目一個名稱,并選擇一個空的make文件項目與支持的工具鏈:

創(chuàng)建空的Makefile項目

然后按“下一步”,然后根據(jù)所選的工具鏈進(jìn)行剩余的對話框。這將創(chuàng)建一個如下的空項目:

空Makefile項目

應(yīng)用文件

要編輯一些東西,添加一個新的源文件:

添加新的源文件

將其命名為main.c或任何您喜歡的:

新的main.c文件

然后添加一個main()例程與一些代碼,例如

static int i;

?

void main(void) {

??for(;;) {

????i++;

??}

??/* do not leave main() */

}

Makefile文件

接下來,使用項目文件夾中的上下文菜單“ 新建”>“文件 ”:

新文件

在項目中創(chuàng)建一個名為“makefile”的文件:

創(chuàng)建Make File

這會添加一個空的make文件。

CMSIS,系統(tǒng)文件和啟動

下一步很大程度上取決于所使用的設(shè)備。我在這個例子中使用恩智浦FRDM-KL25Z板。為了結(jié)構(gòu)化,我創(chuàng)建了源的目錄。特殊的“ debug ”文件夾將用于放置對象和可執(zhí)行文件。

展開的項目結(jié)構(gòu)

Make文件語法

下一步是實現(xiàn)make文件內(nèi)容。一般的make文件如下所示:

all:hello.axf

?

清潔:

?rm main.o hello.axf

?

hello.axf:main.o

?gcc -g -o hello main.o

?

main.o:

?gcc -c -g main.c

make文件中的每個條目都具有以下語法:

<target>:<依賴關(guān)系列表>

<tab>要執(zhí)行的命令

請注意,每個命令前面都需要一個<TAB>字符!

有兩個名為特殊目標(biāo)所有的清潔。'clean'用于刪除所有臨時文件,'all'用于構(gòu)建應(yīng)用程序。

Makefile的內(nèi)容

在makefile中,我定義了用于刪除文件,編譯器和鏈接器的變量:

############################

#刪除文件的命令

RM:= rm -rf

?

############################

#編譯器

CC:= arm-none-eabi-gcc

?

############################

#鏈接器

LL:= arm-none-eabi-gcc

然后我為最終的可執(zhí)行文件定義一個宏:

############################

#二進(jìn)制/可以構(gòu)建

EXE:= \

?./debug/MyMakeProject.axf

接下來是所有目標(biāo)文件的列表。因為目標(biāo)文件將被放置在'debug'文件夾中,這是名稱的一部分:

?

############################

#目標(biāo)文件列表

OBJS:= \

?./debug/main.o \

?./debug/startup_MKL25Z4.o \

?./debug/system_MKL25Z4.o

接下來的事情真的很酷 如果main.c包含頭文件main.h,我將不得不寫一個規(guī)則

main.o:main.c main.h

??$(CC)-c main.c -o main.o

但這是非常痛苦的:我必須為每個文件編寫規(guī)則,并且需要跟蹤頭文件。相反,我讓編譯器稍后再創(chuàng)建依賴文件,擴(kuò)展名為.d(用于依賴)。依賴文件main.d看起來像這樣:

debug / main.o debug / main.d:source / main.c source / main.h

?

source/ main.h:

如果不是“干凈”目標(biāo),我將文件作為附加規(guī)則文件包含在內(nèi):

?

############################

#包含生成的依賴文件(只有不干凈的目標(biāo))

ifneq($(MAKECMDGOALS),clean)

ifneq($(strip $(C_DEPS)))

- 包含$(C_DEPS)

endif

endif

以下是我以后可以使用的編譯器選項集:

?

############################

#編譯器選項

CC_OPTIONS:= -c -std = gnu99 -O0 -g-功能部分-fdata-sections -fno-builtin -mcpu = cortex-m0plus -mthumb -DCPU_MKL25Z128VLK4 -D__USE_CMSIS -I“CMSIS”-I“source”

類似的,鏈接器的選項:

############################

#鏈接器選項

LL_OPTIONS:= -nostdlib -Xlinker -Map =“debug / MyMakeProject.map”-Xlinker --gc-sections -Xlinker -print-memory-usage -mcpu = cortex-m0plus -mthumb -T linksfile.ld -o $(EXE )

接下來的目標(biāo)是構(gòu)建應(yīng)用程序:

############################

#main(all)target

all:$(EXE)

?@echo“***finished building***”

跟著目標(biāo)做一個“干凈”:

############################

#Clean target

clean:

?-$(RM) $(EXECUTABLES) $(OBJS) $(EXE)

?-$(RM) ./debug/*.map

?-@echo ' '

以下是將應(yīng)用程序與所有對象文件鏈接的規(guī)則:

############################

# Rule to link the executable

$(EXE): $(OBJS) $(USER_OBJS) linkerfile.ld

?@echo 'Building target: $@'

?@echo 'Invoking: Linker'

?arm-none-eabi-gcc $(LL_OPTIONS) $(OBJS) $(LIBS)

?@echo 'Finished building target: $@'

?@echo ' '

接下來,我指定構(gòu)建對象文件的規(guī)則。我必須為每個要使用的子文件夾指定一個規(guī)則:

############################

# Rule to build the files in the source folder

./debug/%.o: ./source/%.c

?@echo 'Building file: $<'

?$(CC) $(CC_OPTIONS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"

?@echo 'Finished building: $<'

?@echo ' '

?

############################

# Rule to build the files in the CMSIS folder

./debug/%.o: ./CMSIS/%.c

?@echo 'Building file: $<'

?$(CC) $(CC_OPTIONS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"

?@echo 'Finished building: $<'

?@echo ' '

選項-MMD -MP -MF“$(@:%。o =%。d)”

-MT“$(@:%。o =%。o)” 為每個編譯的源文件生成依賴項.d文件。

?

制作目標(biāo)

要構(gòu)建項目,可以使用Eclipse中通常的“make / build”和“clean”菜單/命令。但還有一個很酷的方式:構(gòu)建目標(biāo)!

為此,打開構(gòu)建目標(biāo)視圖(菜單Windows>顯示視圖>其他):

Make創(chuàng)建目標(biāo)

在該視圖中,選擇項目,然后單擊“新建目標(biāo)”按鈕:

新建目標(biāo)

創(chuàng)建“干凈”目標(biāo):

清潔目標(biāo)

這將為項目添加一個“構(gòu)建目標(biāo)”組。使用上下文菜單為“全部”添加新目標(biāo):

創(chuàng)建新的目標(biāo)

這樣,我可以雙擊或使用上下文菜單在makefile中執(zhí)行目標(biāo):

在Eclipse項目瀏覽器中創(chuàng)建目標(biāo)

綜述

在Eclipse中進(jìn)行托管的制作和構(gòu)建是一個很好的功能:它簡單易用,并且可能是與IDE類似的98%的用例的正確的東西。但是如果我想使用Eclipse的普通make文件,這并不困難。使用提出的make文件模板,如果將新的源添加到項目中,我必須擴(kuò)展文件列表。否則一切都得到照顧。編寫文件需要學(xué)習(xí)階段,但這可能是一個很好的投入。

接下來就可以快樂的Make中了。

?

相關(guān)鏈接

  • 本文在GitHub上的項目和文件:https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/MCUXpresso/FRDM-KL25Z/MyMakeProject
  • 制作文件教程:https://mcuoneclipse.com/2012/02/13/make-my-make-with-eclipse-and-mcu10/
  • GNU Make:https : //www.gnu.org/software/make/

歡迎關(guān)注:

總結(jié)

以上是生活随笔為你收集整理的使用Eclipse进行Makefile项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。