如何通过C中的make更改宏定义

时间:2018-05-19 06:40:00

标签: c makefile macros

所以我正在创建一个C程序,它从static unsigned char[M_SIZE]数组获取其内存,其中M_SIZE是一个宏。我需要做的是能够通过make中的命令更改该宏的值,这样有人可以根据传递给make的参数编译具有不同大小的保留内存的程序。

我的头文件示例是DataStore.h

#ifndef DATA_STORE_H
#define DATA_STORE_H

#define M_SIZE 50000 // Need this to be configurable via make arguments

unsigned char* DataStore_get_buf(void);
unsigned char* DataStore_get_end(void);
void DataStore_inc_ptr(void);

#endif

我的示例C文件是DataStore.c

#include "DataStore.h"

static unsigned char DataStore_BUFFER[M_SIZE];
static unsigned char* DataStore_PTR = DataStore_BUFFER;

unsigned char* DataStore_get_buf(void)
{
   return DataStore_BUFFER;
}

unsigned char* DataStore_get_end(void)
{
   return DataStore_BUFFER + M_SIZE;
}

void DataStore_inc_ptr(void)
{
    DataStore_PTR++;
}

所以基本上,我需要一种方法来在程序编译之前通过一些命令或一些可以传递给make的配置来改变M_SIZE。

EDIT1:

这个问题是独一无二的,因为我需要一种方法,不仅要传递一个可配置的宏值,而且要处理这个值不作为命令传入的情况,而是使用默认的宏值。

2 个答案:

答案 0 :(得分:3)

如果您确定要在编译时设置固定大小,请修改要使用的标头:

#ifndef M_SIZE
#define M_SIZE 50000
#endif

然后您可以在编译器命令行上覆盖宏:

cc … -DM_SIZE=100000 …

保留默认值,这样如果省略编译器选项,代码仍然可以合理编译。你可以决定你想要编译失败,但这通常不是一个好的选择。

答案 1 :(得分:1)

删除decode(genericType.self并将值传递给编译器的命令行,如#define。或者更好的是,通过gcc -DM_SIZE=1000分配并将大小作为命令行参数传递,并通过malloc检索它,这将允许更改大小而无需重新编译。