Board logo

标题: Nios II IDE软件编译环境探密之(二)[转帖] [打印本页]

作者: deng    时间: 2005-11-3 09:52     标题: 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的知识去理解。
以上的分析只是抛砖引玉,希望大家奉献在编译环境设置中更好、更有效的方法。





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0