在Openwrt软件包的Makefile中错误定义了宏

时间:2018-06-20 16:48:09

标签: c makefile c-preprocessor openwrt

在我正在使用的openwrt软件包中,我通过将以下bloc添加到Config.in文件中来定义了一个新的配置标志:

config VENDOR_PREFIX
    string "Vendor Prefix"
    default "X_Custom_SE_"

该标志已很好地添加到menuconfig中:

enter image description here

我希望这个配置标志的值在我的C代码中被视为宏。因此,我在程序包的Makefile中定义了一个宏CUSTOM_PREFIX,并通过以下方式为其分配了已定义标志的值:

TARGET_CFLAGS += -DCUSTOM_PREFIX=\"$(CONFIG_VENDOR_PREFIX)\"

然后我试图通过这样的结构变量初始化来调用我的C代码中的宏:

struct parameter_struct param1= {CUSTOM_PREFIX"param1", 4};

之后,我尝试对其进行编译。但是我遇到了这个编译错误:

/home/user/openwrt//staging_dir/toolchain-mips_mips32_gcc-5.5.0_musl/usr/include -I/home/user/openwrt/staging_dir/toolchain-mips_mips32_gcc-5.5.0_musl/include/fortify -I/home/user/openwrt/staging_dir/toolchain-mips_mips32_gcc-5.5.0_musl/include -I/home/user/openwrt/staging_dir/target-mips_mips32_musl/usr/include -I/home/user/openwrt/staging_dir/target-mips_mips32_musl/usr/include -I/home/user/openwrt/staging_dir/target-mips_mips32_musl/usr/include -DCWMP_VERSION=\"3.0.0\" -I../inc/ -I../dm/ -I../dm/dmtree/ -I../dm/dmtree/common -I../dm/dmtree/tr098 -I../dm/dmtree/tr181 -I../dm/dmtree/upnp -Os -pipe -mips32 -mtune=mips32 -fno-caller-saves -DCONFIG_TARGET_iopsys_brcm63xx_mips -g3 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/home/user/openwrt/build_dir/target-mips_mips32_musl/icwmp-curl/icwmp-4.0-2018-03-21:icwmp-4.0-2018-03-21 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -DCUSTOM_PREFIX=X_CUSTOM1_SE_ -D_GNU_SOURCE -D_AADJ -MT ../dm/dmtree/common/libdatamodel_la-deviceinfo.lo -MD -MP -MF ../dm/dmtree/common/.deps/libdatamodel_la-deviceinfo.Tpo -c ../dm/dmtree/common/deviceinfo.c  -fPIC -DPIC -o ../dm/dmtree/common/.libs/libdatamodel_la-deviceinfo.o
                 ^
../dm/dmtree/common/deviceinfo.c: At top level:
<command-line>:0:15: error: 'X_CUSTOM1_SE_' undeclared here (not in a function)
../dm/dmtree/common/deviceinfo.c:28:2: note: in expansion of macro 'CUSTOM_PREFIX'
 {CUSTOM_PREFIX"param1", 4}

struct parameter_struct param1 = {CUSTOM_PREFIX“ param1”,4}; 似乎c程序不接受它作为字符串。 我的宏定义有问题吗?

1 个答案:

答案 0 :(得分:1)

如我所料,我在帖子标题中指出了错误,原因是Makefile中宏的定义。在Openwrt Makefile中,宏的定义应如下所示:

{{1}}