35. 外部应用程序/库的 Makefile

外部的应用程序或库必须包含RTE_SDK指定的位于mk目录中的Makefiles文件。 这些Makefiles包括:

  • ${RTE_SDK}/mk/rte.extapp.mk: 构建一个应用程序。
  • ${RTE_SDK}/mk/rte.extlib.mk: 构建一个静态库。
  • ${RTE_SDK}/mk/rte.extobj.mk: 购件一个目标文件。

35.1. 前提

必须定义以下变量:

  • ${RTE_SDK}: 指向DPDK根目录。
  • ${RTE_TARGET}: 指向用于编译的目标编译器(如x86_64-native-linuxapp-gcc)。

35.2. 构建 Targets

支持构建target时指定输出文件的目录,使用 O=mybuilddir 选项。 这是可选的,默认的输出目录是build。

  • all, “nothing” (仅make)

    编译应用程序或库到指定的输出目录中。

    例如:

    make O=mybuild
    
  • clean

    清除make操作产生的所有目标文件。

    例如:

    make clean O=mybuild
    

35.3. Help Targets

  • help

    显示帮助信息。

35.4. 其他有用的命令行变量

以下变量可以在命令行中指定:

  • S=

    指定源文件的位置。默认情况下是当前目录。

  • M=

    指定需要被调用的Makefile。默认情况下使用 $(S)/Makefile。

  • V=

    使能详细编译(显示完全编译命令及一些中间命令过程)。

  • D=

    启用依赖关系调试。提供了一些有用的信息。

  • EXTRA_CFLAGS=, EXTRA_LDFLAGS=, EXTRA_ASFLAGS=, EXTRA_CPPFLAGS=

    添加的编译、连接或汇编标志。

  • CROSS=

    指定一个交叉工具链,该前缀将作为所有gcc/binutils应用程序的前缀。只有在gcc下才起作用。

35.5. 从其他目录中编译

通过指定输出和源目录,可以从另一个目录运行Makefile。 例如:

export RTE_SDK=/path/to/DPDK
export RTE_TARGET=x86_64-native-linuxapp-icc
make -f /path/to/my_app/Makefile S=/path/to/my_app O=/path/to/build_dir