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

Jos*_*ein 1 c macros makefile

所以我正在制作一个 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
Run Code Online (Sandbox Code Playgroud)

我的示例 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++;
}
Run Code Online (Sandbox Code Playgroud)

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

编辑1:

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

Jon*_*ler 6

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

\n\n
#ifndef M_SIZE\n#define M_SIZE 50000\n#endif\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
cc \xe2\x80\xa6 -DM_SIZE=100000 \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n