Makefile.in 中的 @CPPFLAGS@ 是什么意思?

What does it means @CPPFLAGS@ in Makefile.in?

我有一个 Makefile.in 文件,它通过配置生成 Makefile.am。之后使用 automake Makefile.am 创建 Makefile.

现在我想在生成的 Makefile 中添加一个定义。问题是,在生成的 Makefile 中,我在变量 CPPFLAGS 中找到了一个标志列表,但是在 Makefile.in 中的 CPPFLAGS 定义中,我发现只有一行是写在以下方式:

CPPFLAGS = @CPPFLAGS@

@CPPFLAGS@ 是什么意思?我如何在生成的 Makefile 中设置一个新标志?

CPPFLAGS 代表 C 预处理器标志。

您可以将其设置为环境变量或通过命令行设置:

CPPFLAGS="-g -Wall -O0" automake

CPPFLAGS="-g -Wall -O0" make

来自 gnu Make 手册:

CPPFLAGS

Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers).

字符串 @CPPFLAGS@ 在执行 configure 时被配置脚本扩展为 CPPFLAGS 的值。也就是说,如果你 运行 configure CPPFLAGS=foo,那么 @CPPFLAGS@ 将被扩展为字符串 foo.

Automake 运行 在调用 configure 之前很久。 automake 所做的只是在构建该文件时将字符串 @CPPFLAGS@ 添加到 Makefile.in。

作为项目维护者,您不应该编辑这些值。这是用户能够在配置时向构建添加标志的机制。

如果你想添加标志,你应该在Makefile.am中分配给AM_CPPFLAGS。但很可能你真的不想这样做。很难说,这取决于您认为要添加的标志。