我通常使用以下选项将宏定义从"生成命令行"传递到"生成文件":

我还使用类似的编译器选项将宏定义从"makefile"传递到"源代码":

我现在需要的是,允许makefile的用户能够立即将任意宏定义从"make.exe命令行"传递到"源代码",而无需更改makefile中的任何内容.

因此用户可以键入:

然后,代码main.c可以直接看到var:

int main()
{
  int i = var;
}

推荐答案

按以下方式调用make命令:

make CFLAGS=-Dvar=42

确保在Makefile的compile命令中使用$(CFLAGS).正如@jørgensen所提到的,将变量赋值放在make命令之后将覆盖Makefile中已经定义的CFLAGS值.

或者,您可以在CFLAGS之外的另一个变量中设置-Dvar=42,然后在CFLAGS中重用此变量,以避免完全重写CFLAGS.

C++相关问答推荐

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

为什么可以通过指向常量int的指针间接地改变整数的值?

我应该如何解决我自己为iOS编译的xmlsec1库的问题?转换Ctx.first在xmlSecTransformCtxPrepare()之后为空

#If指令中未定义宏?

Clang警告称,`ffi_type`与`sizeof`不兼容

我怎么才能用GCC编译一个c库,让它包含另一个库呢?

如何使用_newindex数组我总是得到错误的参数

C代码在字符串中删除不区分大小写的子字符串的问题

致命错误:ASM/rwan ce.h:没有这样的文件或目录.符号链接还不够

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

链表删除 node 错误

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

存储和访问指向 struct 的指针数组

当读取可能会阻塞管道中的父进程时,为什么要等待子进程?

Leet代码运行时错误:代码不会在Leet代码上编译,而是在其他编译器中编译,如netbeans和在线编译器

在C中使用字符串时是否不需要内存分配?

如何使crc32的结果与cksum匹配?

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数

窗口消息处理函数以某种方式更改了应保持不变的 int 变量的值