如何通过C中的make更改宏定义
所以我制作了一个C程序,它从一个静态无符号字符[M_SIZE]数组中获取内存,其中M_SIZE是一个宏。我需要做的是能够通过make中的命令更改该宏的值,这样某人就可以根据传递给make的参数使用不同大小的保留内存来编译程序 我的头文件示例是DataStore.h如何通过C中的make更改宏定义,c,makefile,macros,C,Makefile,Macros,所以我制作了一个C程序,它从一个静态无符号字符[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 u
#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++;
}
因此,基本上,我需要一种方法来改变M_大小,然后再通过一些命令或一些可以传递到make中的配置来编译程序
编辑1:
这个问题很独特,因为我需要一个方法,不仅要传入一个可配置的宏值,还要处理该值没有作为命令传入,而是使用默认宏值的情况。删除define并将该值传递给编译器的命令行,如gcc-DM_SIZE=1000。或者更好的方法是,通过malloc分配并将大小作为命令行参数传递,然后通过argv检索它,这将允许在不重新编译的情况下更改大小。删除define并将值传递给编译器的命令行,如gcc-DM_size=1000。或者更好的方法是,通过malloc进行分配,并将大小作为命令行参数传递,然后通过argv进行检索,这将允许在不重新编译的情况下更改大小。如果确定要在编译时设置固定大小,请修改标头以使用:
#ifndef M_SIZE
#define M_SIZE 50000
#endif
然后可以在编译器命令行上重写宏:
cc … -DM_SIZE=100000 …
保留默认值,这样,如果省略编译器选项,代码仍能进行合理编译。相反,您可以决定希望编译失败,但这通常不是一个好选择。如果您确定希望在编译时设置固定大小,请修改标头以使用:
#ifndef M_SIZE
#define M_SIZE 50000
#endif
然后可以在编译器命令行上重写宏:
cc … -DM_SIZE=100000 …
保留默认值,这样,如果省略编译器选项,代码仍能进行合理编译。您可以选择让编译失败,但这通常不是一个好的选择。出于我的目的,我不能使用动态内存分配,但您的第一个建议应该有效。为什么不呢?除了在非常小的嵌入式系统上,动态内存管理应该没有问题……这实际上是一种新型的嵌入式系统编程语言-出于我的目的,我不能使用动态内存分配,但您的第一个建议应该有效。为什么不呢?除了在非常小的嵌入式系统上,动态内存管理应该没有问题……这实际上是一种新型的嵌入式系统编程语言-可能的重复可能的重复