Nios II IDE软件编译环境探密之(二)[转帖]
- UID
- 85150
- 性别
- 男
|
Nios II IDE软件编译环境探密之(二)[转帖]
在Nios II IDE软件编译环境探密之(一)中我们了解了GNU MAKE和Makefile的相关知识,我们知道NIOS II IDE中集成了GNU C/C++编译环境(具体位置在C:\altera\kitsios2\bin\nios2-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 "Properties" option # - Use property pages to set options. Details given below 在这个自动生成的Makefile文件中我们看到设置了几个重要的宏变量,但具体的编译规则不在这个文件中出现,我们在下面的分析中可知Nios II IDE把具有共性的部分放在底层HAL库中实现了,下面是Makefile中定义的一些宏变量: PROJECT := hello_led_0 SYSTEM_NAME := hello_led_0_syslib_1 SYSTEM_DIR := D:/develop/low_cost/software/hello_led_0_syslib_1 SUBDIRS := \ . \ include ${patsubst %, %/subdir.mk, $(SUBDIRS)} MAKEFILE_LIST += $(patsubst %, %/subdir.mk, $(SUBDIRS)) APP_MAKEFILE := C:/altera/kits/nios2/components/altera_hal/build/app.mk include $(APP_MAKEFILE) 在上述变量中,PROJECT、SYSTEM_NAME 、SYSTEM_DIR等变量,将在包含进来的规则文件中被引用。APP_CONFIG := Debug和SYS_CONFIG := 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_all.mk文件,该文件定义了以下变量: COMPONENTS_PROCESSOR = /cygdrive/c/altera/kits/nios2/components/altera_nios2 COMPONENTS_OS = /cygdrive/c/altera/kits/nios2/components/altera_hal COMPONENTS_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/nios2/components/altera_avalon_sysid \ /cygdrive/c/altera/kits/nios2/components/altera_avalon_cfi_flash \ /cygdrive/c/altera/kits/nios2/components/altera_avalon_uart PTF = D:\develop\low_cost\low_cost_1C20.ptf CPU = cpu 这些都是硬件相关的。 app.mk后半部分主要引入了项目相关外部设备组件的编译变量 COMPONENT_MAKEFILES = $(wildcard $(foreach component, $(COMPONENTS), \ $(component)/HAL/src/component.mk)) 其中include $(SOPC_KIT_NIOS2)/components/altera_hal/build/app_rules.mk包含引入了应用程序编译规则。 这些编译规则文件一般都在altera\kits\nios2\components\altera_hal\build目录中,通过前面我们提到的文件中逐步定义变量,到这些.mk文件中时都已经统一了,做到和具体项目无关。我们在分析的时候需要有耐心做一些变量的替换才能理解,对照我们在(一)部分介绍的GNU MAKE的知识去理解。 以上的分析只是抛砖引玉,希望大家奉献在编译环境设置中更好、更有效的方法。 |
|
|
|
|
|