gcc - 我需要将 CFLAGS 显式传递给 gcc 吗?

标签 gcc makefile implicit cflags

我阅读了很多有关 CFLAGS 的教程,还查看了官方文档。他们到处都说 CFLAGS 是隐式的,但仍然在示例 makefile 中将其显式传递给编译器:

CFLAGS=-O2
gcc $(CFLAGS) -c foo.c -o foo.o

那么,“隐式”一词在这种情况下意味着什么?如果我在 makefile 中声明 CFLAGS=-O2 ,然后只说 gcc -c foo.c -o foo.o,将会 -O2是否活跃(那么,它真的是隐含的)吗?如果是这样,为什么所有教程(包括官方文档)仍然在示例中明确传递它?

最佳答案

Everywhere they say CFLAGS is implicit but still pass it explicitly in their example makefile to the compiler.

gcc 不使用 CFLAGS 环境变量。请参阅Environment Variables Affecting GCC .

CFLAGS 是带有 C 编译器标志的 Makefile 变量的常规名称,由隐式 make 规则使用。请参阅Variables Used by Implicit Rules了解更多详情。

如果您使用自己的 make 规则而不是内置规则,则根本不需要使用 CFLAGS。尽管这样做是一个有用的约定,因为人们熟悉常规的 make 变量名称。

关于gcc - 我需要将 CFLAGS 显式传递给 gcc 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29899756/

相关文章:

c++ - 在 constexpr 中使用 argc,是否严格要求所涉及的任何子表达式都是常量表达式?

c++ - 问题编译 C++ 源

c - GNU C 预处理器 : Stringify the result of a macro evaluation

makefile - 编译器错误 gcc-8 : error: unrecognized command line option '-no-pie'

scala - 如何在 Play Framework 路由文件中使用导入和隐式?

GCC 预处理器删除注释

makefile - := and += in kernel Makefiles?有什么区别

c++ - 如果我在 GCC 中编译和链接不需要的库会怎样?

class - 为什么我可以将方法标记为隐式而不是构造函数?

scala - 此递归列表展平如何工作?