我尝试构建一个有多个变体的项目。 每个变体都有一个不同的const表。 所以我想使用宏(例如VARIANT)来控制将要编译的const表。
#if (VARIANT == 1)
static UINT8 const variant_1_serial_no[6] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
#else if (VARIANT == 2)
static UINT8 const variant_2_serial_no[6] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
#endif
我使用批处理文件来调用make实用程序。 在批处理文件中,我使用set / p让用户有机会选择变体编号
set /p VARIANT_TYPE=1:variant1;2:variant2;others quit(for example:input 1 chose variant1)
call make.bat %VARIANT_TYPE%
然后我尝试将此宏定义为编译器输入。
-DVARIANT=$(VARIANT_TYPE)
并且它根本不起作用,因为这里$(VARIANT_TYPE)是非法的。
我使用Borland make utility ver5.2和IAR编译器。
有人知道如何将此参数传递给编译器吗?
答案 0 :(得分:1)
假设variant_1_serial_no
和variant_2_serial_no
相同。
不是将值传递给宏并尝试比较,您可以执行以下操作。
#ifdef VAR1
static UINT8 const variant_1_serial_no[6] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
#elif VAR2
static UINT8 const variant_2_serial_no[6] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
#endif
编译时选择第一组常量使用
gcc -DVAR1 <file_name>
否则选择VAR2
使用
gcc -DVAR2 <file_name>
答案 1 :(得分:0)
在您的批处理文件中,您调用call make.bat %VARIANT_TYPE%
;如果VARIANT_TYPE
设置为1,则会扩展为call make.bat 1
,这显然不对(这将要求make构建目标1
,这显然不是您想要的)。< / p>
如果你想在make命令行上设置一个变量(假设Borland make使用与传统make相同的方法)那么你必须让它变成一个变量:
call make.bat VARIANT_TYPE=%VARIANT_TYPE%
以便实际调用make.bat VARIANT_TYPE=1
或做出任何选择。