C make命令替换代码中的常量
很抱歉,如果这是一个原始的问题,但我真的是linux新手。在使用C make命令替换代码中的常量,c,unix,makefile,C,Unix,Makefile,很抱歉,如果这是一个原始的问题,但我真的是linux新手。在使用make命令构建应用程序时,是否有方法替换源代码中的常量 我知道下一个可能的方法是更改源代码中使用的头文件,但我这样做是因为我必须对多个微控制器进行编程,每个微控制器都应该有一个唯一的整数作为其编号(该编号在代码中被指定为常量) 任何提示都将不胜感激 调用编译器时,通常通过定义预处理器宏来完成,例如: # Makefile NUMBER := 42 %.o : %.c gcc -c -o $@ ${CPPFLAGS} ${C
make
命令构建应用程序时,是否有方法替换源代码中的常量
我知道下一个可能的方法是更改源代码中使用的头文件,但我这样做是因为我必须对多个微控制器进行编程,每个微控制器都应该有一个唯一的整数作为其编号(该编号在代码中被指定为常量)
任何提示都将不胜感激 调用编译器时,通常通过定义预处理器宏来完成,例如:
# Makefile
NUMBER := 42
%.o : %.c
gcc -c -o $@ ${CPPFLAGS} ${CFLAGS} -DNUMBER=${NUMBER} $<
调用编译器时,通常通过定义预处理器宏来完成,例如:
# Makefile
NUMBER := 42
%.o : %.c
gcc -c -o $@ ${CPPFLAGS} ${CFLAGS} -DNUMBER=${NUMBER} $<
可以使用通过命令行传递给编译器的C语言宏。通常的Makefile
代码片段看起来像
CFLAGS = -DVERSION_INT=42 -DVERSION_STRING=\"Frobozz Magic Frobnicator (TM)\"
main: main.c
$(CC) $(CFLAGS) -o $@ main.c
总的来说,你可能有
static int version = VERSION_INT;
static char vers[] = VERSION_STRING;
可以使用通过命令行传递给编译器的C语言宏。通常的Makefile
代码片段看起来像
CFLAGS = -DVERSION_INT=42 -DVERSION_STRING=\"Frobozz Magic Frobnicator (TM)\"
main: main.c
$(CC) $(CFLAGS) -o $@ main.c
总的来说,你可能有
static int version = VERSION_INT;
static char vers[] = VERSION_STRING;
你应该看看sed和grep,它们提供了你所需要的功能,或者如果你的源代码正被C预处理器处理,用
make-Dconstant=value
传入一个合适的#define
。你应该看看sed和grep,它们提供了您所需的功能。如果您的源代码正由C预处理器处理,请使用make-Dconstant=value
传入合适的#define
。避免重新定义隐式规则几乎总是更好的。一行Makefile就足够了:cppfaligs=-DNUMBER=N
(也许还有第二行:all:foo
,这样用户就可以简单地键入make
而不是make foo
)@willampersell:我同意-D…
应该放在cppfaligs
中。我更喜欢禁用我自己的makefile的所有内置规则,因为它们对我来说不够好。例如,我喜欢在makefile更改时触发重新编译,因此我的对象文件也依赖于它们的makefile。一行Makefile就足够了:cppfaligs=-DNUMBER=N
(也许还有第二行:all:foo
,这样用户就可以简单地键入make
而不是make foo
)@willampersell:我同意-D…
应该放在cppfaligs
中。我更喜欢禁用我自己的makefile的所有内置规则,因为它们对我来说不够好。例如,我喜欢在makefiles发生更改时触发重新编译,因此我的对象文件也依赖于它们的makefile。-D
选项用于预处理器,属于CPPFLAGS
而不是CFLAGS
@williampersell我不同意CPPFLAGS
或多或少是J.random Hacker的一项随机发明CFLAGS
是POSIX的方式,我非常重视可移植性。但任何人的MMV.:-)有趣的令人惊讶的是,要将长期存在的惯例与实际标准区分开来是非常困难的。谢谢你指出这一点-D
选项用于前置处理器,属于CPPFLAGS
而不是CFLAGS
@williampersell我不同意CPPFLAGS
或多或少是J.random Hacker的一项随机发明CFLAGS
是POSIX的方式,我非常重视可移植性。但任何人的MMV.:-)有趣的令人惊讶的是,要将长期存在的惯例与实际标准区分开来是非常困难的。谢谢你指出这一点!