【问题】
在DPDK上进行C/C++混合编程,使用g++编译程序,但C++程序需要特定的编译参数,此时应该如何修改makefile文件使得DPDK在编译程序时带上指定的参数?
【解决方案】
1.DPDK提供的makefile文件模板如下:
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 = dpdkrecv
# all source are stored in SRCS-y
SRCS-y := main.c
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
include $(RTE_SDK)/mk/rte.extapp.mk
"CFLAGS += -O3" 表示优化等级,3最高,0表示不优化
2.如果在DPDK上编译C程序,请直接在"CFLAGS += -O3 "语句后添加参数
3.如果在DPDK上编译C++程序,请将”CFLAGS"改为“CPPFLAGS"再进行添加,比如我的程序需要用到-mbmi2编译参数,因此我的makefile文件如下:
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 = dpdkrecv
# all source are stored in SRCS-y
SRCS-y := main.c syncshm.c cqf.cpp countingquotientfilter.cpp murmurhash3.cpp
CPPFLAGS += -O3 -mbmi2
CFLAGS += $(WERROR_FLAGS)
include $(RTE_SDK)/mk/rte.extapp.mk
注意:一定是把CFLAGS改为CPPFLAGS,尝试过CPPFLAGS和CFLAGS共存的情况同样编译不通过。
亲测编译,仅供参考