如何将参数值从make命令行传递给编译器

时间:2015-03-23 09:21:40

标签: c batch-file makefile

我尝试构建一个有多个变体的项目。 每个变体都有一个不同的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编译器。

有人知道如何将此参数传递给编译器吗?

2 个答案:

答案 0 :(得分:1)

假设variant_1_serial_novariant_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或做出任何选择。