44. Building Your Own Application
44.1. Compiling a Sample Application in the Development Kit Directory
在编译示例应用程序(例如hello world)时,必须设置以下的环境变量:RTE_SDK和RTE_TARGET。
~/DPDK$ cd examples/helloworld/
~/DPDK/examples/helloworld$ export RTE_SDK=/home/user/DPDK
~/DPDK/examples/helloworld$ export RTE_TARGET=x86_64-native-linuxapp-gcc
~/DPDK/examples/helloworld$ make
CC main.o
LD helloworld
INSTALL-APP helloworld
INSTALL-MAP helloworld.map
默认情况下,生成的二进制文件在build文件夹下面:
~/DPDK/examples/helloworld$ ls build/app
helloworld helloworld.map
44.2. Build Your Own Application Outside the Development Kit示例应用程序(Hello World)可以被复制到一个新目录,以此作为开发的起点:
ifeq ($(RTE_SDK),)
$(error "Please define RTE_SDK environment variable")
endif
# Default target, can be overriden by command line or environment
RTE_TARGET ?= x86_64-native-linuxapp-gcc
include $(RTE_SDK)/mk/rte.vars.mk
# binary name
APP = helloworld
# all source are stored in SRCS-y
SRCS-y := main.c
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
include $(RTE_SDK)/mk/rte.extapp.mk
~$ cp -r DPDK/examples/helloworld my_rte_app
~$ cd my_rte_app/
~/my_rte_app$ export RTE_SDK=/home/user/DPDK
~/my_rte_app$ export RTE_TARGET=x86_64-native-linuxapp-gcc
~/my_rte_app$ make
CC main.o
LD helloworld
INSTALL-APP helloworld
INSTALL-MAP helloworld.map
44.3. Customizing MakefilesHello World示例应用程序提供的默认makefile是一个很好的起点。它包括:
- 在开始处,$(RTE_SDK)/mk/rte.vars.mk
- 在末尾处,$(RTE_SDK)/mk/rte.extapp.mk
用户必须定义几个变量:
- APP:应用程序的名字。
- SRCS-y:源文件列表(*.c,*.S)。
44.3.2. Library Makefile
也可以用同样的方法构建库:
- 在开始处,$(RTE_SDK)/mk/rte.vars.mk 。
- 在末尾处,$(RTE_SDK)/mk/rte.extlib.mk 。
唯一的区别是,变量APP被LIB代替,它包含了库的名称。例如,libfoo.a。
44.3.3. Customize Makefile Actions
可以定义一些变量来定制Makefile操作。最常见的如下所示。参考
Development Kit Build System中的 Makefile Description
详细章节:
- VPATH:用于构建系统搜索源的路径列表,默认情况下,RTE_SRCDIR将包含在VPATH中。
- CFLAGS_my_file.o:用于编译my_file.c的指定标志。
- CFLAGS:用于编译的C文件的标志。上面的是针对某个文件,这个是所有文件。
- LDFLAGS:链接相关的标志。
- CPPFLAGS:C预处理相关标志(仅使用.s文件时设置)。
- LDLIBS:链接库清单,eg,-L /path/to/libfoo - lfoo。