NiosIIIDE軟件編譯環境探密_第1頁
NiosIIIDE軟件編譯環境探密_第2頁
NiosIIIDE軟件編譯環境探密_第3頁
NiosIIIDE軟件編譯環境探密_第4頁
NiosIIIDE軟件編譯環境探密_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Nios II IDE軟件編譯環境探密 Nios II IDE編譯環境提供了許多工程模板幫助用戶盡可能的快速的推出可運行的系統,可是當我們用一種模板生成應用環境后,需要增加其他應用模式的時候就會遇到問題,我們有必要對Nios II IDE的編譯環境有一個了解,使我們靈活的去配置編譯系統,下面介紹的內容對于熟悉LINUX系統編程的開發者可能很熟悉,希望我們一起來分析Nios II IDE編譯的細節,它的編譯環境還是很精巧的哦,謬誤之處請斧正。首先我整理了一份GNU MAKE的資料,閱讀它能為我們了解Nios II IDE的編譯環境提供基礎。 GNU make 和 makefile· G

2、NU make · makefile 基本結構 · makefile 變量 · GNU make 的主要預定義變量 · 隱含規則 · makefile 范例 · 運行 make 1. GNU make在大型的開發項目中,通常有幾十到上百個的源文件,如果每次均手工鍵入 gcc 命令進行編譯的話,則會非常不方便。因此,人們通常利用 make 工具來自動完成編譯工作。這些工作包括:如果僅修改了某幾個源文件,則只重新編譯這幾個源文件;如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。利用這種自動編譯可大大簡化開發工作,避免不必要的重

3、新編譯。實際上,make 工具通過一個稱為 makefile 的文件來完成并自動維護編譯工作。makefile 需要按照某種語法進行編寫,其中說明了如何編譯各個源文件并連接生成可執行文件,并定義了源文件之間的依賴關系。當修改了其中某個源文件時,如果其他源文件依賴于該文件,則也要重新編譯所有依賴該文件的源文件。makefile 文件是許多編譯器,包括 Windows NT 下的編譯器維護編譯信息的常用方法,只是在集成開發環境中,用戶通過友好的界面修改 makefile 文件而已。默認情況下,GNU make 工具在當前工作目錄中按如下順序搜索 makefile:* GNUmakefile* ma

4、kefile* Makefile在 UNIX 系統中,習慣使用 Makefile 作為 makfile 文件。如果要使用其他文件作為 makefile,則可利用類似下面的 make 命令選項指定 makefile 文件:$ make -f Make2. makefile 基本結構makefile 中一般包含如下內容:* 需要由 make 工具創建的項目,通常是目標文件和可執行文件。通常使用“目標(target)”一詞來表示要創建的項目。* 要創建的項目依賴于哪些文件。* 創建每個項目時需要運行的命令。例如,假設你現在有一個 C+ 源文件 test.C,該源文件包含有自定義的頭文件 test.h

5、,則目標文件 test.o明確依賴于兩個源文件:test.C 和 test.h。另外,你可能只希望利用 g+ 命令來生成 test.o 目標文件。這時,就可以利用如下的 makefile 來定義 test.o 的創建規則:# This make is a example.# The following lines indicate how test.o depends# test.C and test.h, and how to create test.otest. test.C test.hg+ -c -g test.C從上面的例子注意到,第一個字符為 # 的行為注釋行。第一個非注釋行指定

6、test.o 為目標,并且依賴于test.C 和 test.h 文件。隨后的行指定了如何從目標所依賴的文件建立目標。當 test.C 或 test.h 文件在編譯之后又被修改,則 make 工具可自動重新編譯 test.o,如果在前后兩次編譯之間,test.C 和 test.h 均沒有被修改,而且 test.o 還存在的話,就沒有必要重新編譯。這種依賴關系在多源文件的程序編譯中尤其重要。通過這種依賴關系的定義,make 工具可避免許多不必要的編譯工作。當然,利用 Shell 腳本也可以達到自動編譯的效果,但是,Shell 腳本將全部編譯任何源文件,包括哪些不必要重新編譯的源文件,而 make

7、工具則可根據目標上一次編譯的時間和目標所依賴的源文件的更新時間而自動判斷應當編譯哪個源文件。一個 makefile 文件中可定義多個目標,利用 make target 命令可指定要編譯的目標,如果不指定目標,則使用第一個目標。通常,makefile 中定義有 clean 目標,可用來清除編譯過程中的中間文件,例如:clean:rm -f *.o運行 make clean 時,將執行 rm -f *.o 命令,最終刪除所有編譯過程中產生的所有中間文件。3. makefile 變量GNU 的 make 工具除提供有建立目標的基本功能之外,還有許多便于表達依賴性關系以及建立目標的命令的特色。其中之一

8、就是變量或宏的定義能力。如果你要以相同的編譯選項同時編譯十幾個 C 源文件,而為每個目標的編譯指定冗長的編譯選項的話,將是非常乏味的。但利用簡單的變量定義,可避免這種乏味的工作:# Define macros for name of compilerCC = gcc# Define a macr o for the CC flagsCCFLAGS = -D_DEBUG -g -m486# A rule for building a object . test.c test.h$(CC) -c $(CCFLAGS) test.c在上面的例子中,CC 和 CCFLAGS 就是 make 的變量。G

9、NU make 通常稱之為變量,而其他 UNIX 的 make 工具稱之為宏,實際是同一個東西。在 makefile 中引用變量的值時,只需變量名之前添加 $ 符號,如上面的 $(CC) 和 $(CCFLAGS)。4. GNU make 的主要預定義變量GNU make 有許多預定義的變量,這些變量具有特殊的含義,可在規則中使用。表 1-5 給出了一些主要的預定義變量,除這些變量外,GNU make 還將所有的環境變量作為自己的預定義變量。表 1-5 GNU make 的主要預定義變量預定義變量 含義$* 不包含擴展名的目標文件名稱。$+ 所有的依賴文件,以空格分開,并以出現的先后為序,可能包

10、含重復 的依賴文件。$< 第一個依賴文件的名稱。$? 所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標的創 建日期晚。$ 目標的完整名稱。$ 所有的依賴文件,以空格分開,不包含重復的依賴文件。$% 如果目標是歸檔成員,則該變量表示目標的歸檔成員名稱。例如,如 果目標名稱為 mytarget.so(image.o),則 $ 為 mytarget.so,而 $% 為 image.o。AR 歸檔維護程序的名稱,默認值為 ar。ARFLAGS 歸檔維護程序的選項。AS 匯編程序的名稱,默認值為 as。ASFLAGS 匯編程序的選項。CC C 編譯器的名稱,默認值為 cc。CFLAGS C

11、 編譯器的選項。CPP C 預編譯器的名稱,默認值為 $(CC) -E。CPPFLAGS C 預編譯的選項。CXX C+ 編譯器的名稱,默認值為 g+。CXXFLAGS C+ 編譯器的選項。FC FORTRAN 編譯器的名稱,默認值為 f77。FFLAGS FORTRAN 編譯器的選項。5. 隱含規則GNU make 包含有一些內置的或隱含的規則,這些規則定義了如何從不同的依賴文件建立特定類型的目標。GNU make 支持兩種類型的隱含規則:* 后綴規則(Suffix Rule)。后綴規則是定義隱含規則的老風格方法。后綴規則定義了將一個具有某個后綴的文件(例如,.c 文件)轉換為具有另外一種后

12、綴的文件(例如,.o 文件)的方法。每個后綴規則以兩個成對出現的后綴名定義,例如,將 .c 文件轉換為 .o 文件的后綴規則可定義為:.c.$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $ $<* 模式規則(pattern rules)。這種規則更加通用,因為可以利用模式規則定義更加復雜的依賴性規則。模式規則看起來非常類似于正則規則,但在目標名稱的前面多了一個 % 號,同時可用來定義目標和依賴文件之間的關系,例如下面的模式規則定義了如何將任意一個 X.c 文件轉換為 X.o 文件:%.c:%.o$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $

13、$<6. makefile 范例#SAMPLE#CCE 的 Makefile7. 運行 make我們知道,直接在 make 命令的后面鍵入目標名可建立指定的目標,如果直接運行 make,則建立第一個目標。我們還知道可以用 make -f mymakefile 這樣的命令指定 make 使用特定的 makefile,而不是默認的 GNUmake 或 Makefile。但 GNU make 命令還有一些其他選項,表 1-6 給出了這些選項。表 1-6 GNU make 命令的常用命令行選項命令行選項 含義-C DIR 在讀取 makefile 之前改變到指定的目錄 DIR。-f FILE 以

14、指定的 FILE 文件作為 makefile。-h 顯示所有的 make 選項。-i 忽略所有的命令執行錯誤。-I DIR 當包含其他 makefile 文件時,可利用該選項指定搜索目錄。-n 只打印要執行的命令,但不執行這些命令。-p 顯示 make 變量數據庫和隱含規則。-s 在執行命令時不顯示命令。-w 在處理 makefile 之前和之后,顯示工作目錄。-W FILE 假定文件 FILE 已經被修改。在上面我們了解了GNU MAKE和Makefile的相關知識,我們知道NIOS II IDE中集成了GNU C/C+編譯環境(具體位置在C:alterakitsnios2binnios2-

15、gnutools,我的系統默認安裝在C:盤上),Nios II IDE編譯環境會為用戶項目自動生成一個基于用戶特定系統配置(SOPC Builder生成的PTF文件)的Makefile文件,Nios II IDE的編譯/連接設置的任何改變都會映射到這個自動生成文件中,這個文件注明:THIS IS AN AUTO-GENERATED FILE. DO NOT EDIT DIRECTLY。用戶不需直接修改,對編譯系統的修改在Makefile文件中注明:To change the settings in here:# - Right click on the project# - Select &q

16、uot;Properties" option# - Use property pages to set options. Details given below 在這個自動生成的Makefile文件中我們看到設置了幾個重要的宏變量,但具體的編譯規則不在這個文件中出現,我們在下面的分析中可知Nios II IDE把具有共性的部分放在底層HAL庫中實現了,下面是Makefile中定義的一些宏變量:PROJECT := hello_led_0SYSTEM_NAME := hello_led_0_syslib_1SYSTEM_DIR := D:/develop/low_cost/softwa

17、re/hello_led_0_syslib_1SUBDIRS := . include $patsubst %, %/subdir.mk, $(SUBDIRS)MAKE += $(patsubst %, %/subdir.mk, $(SUBDIRS)APP_MAKE C:/altera/kits/nios2/components/altera_hal/build/app.mkinclude $(APP_MAKEFILE)在上述變量中,PROJECT、SYSTEM_NAME 、SYSTEM_DIR等變量,將在包含進來的規則文件中被引用。APP_CONFIG := Debug和SYS_CONFIG

18、 := Debug定義的編譯生成文件的目錄,文件末尾通過include包含進兩個文件,其中subdir.mk文件中定義了:C_SRCS += $addprefix ,hello_led.c CXX_SRCS += $addprefix ,ASM_SRCS += $addprefix ,很明顯是用戶項目的三種不同源文件。而include $(APP_MAKEFILE)則引進了系統編譯規則,這些規則定義在底層HAL的build目錄中。順藤摸瓜,我們接著來分析app.mk文件。在app.mk文件中主要完成兩部分工作,前一部分我們可以通過變量的替換看出:包含引入了項目庫目錄中的generated_al

19、l.mk文件,該文件定義了以下變量:COMPONENTS_PROCESSOR = /cygdrive/c/altera/kits/nios2/components/altera_nios2COMPONENTS_OS = /cygdrive/c/altera/kits/nios2/components/altera_halCOMPONENTS_DEVICE_DRIVERS = /cygdrive/c/altera/kits/nios2/components/altera_avalon_pio /cygdrive/c/altera/kits/nios2/components/altera_avalon_jtag_uart /cygdrive/c/altera/kits/nios

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論