哪些规则应该在 GNU make 中使用 CFLAGS
Which rules should use CFLAGS in GNU make
在我的 C 项目的 makefile 中,我将 CFLAGS 变量设置如下 -
CFLAGS=-ansi -pedantic -Wall -Wextra -O2 -isystem $(SQLITEDIR)
我希望这个变量用于构建目标文件的规则,因为标志会影响编译步骤
但是,在 GNU make 手册中
https://www.gnu.org/software/make/manual/make.html#Using-Implicit
我看到下面的例子-
foo : foo.o bar.o
cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
我认为这是链接步骤的规则,所以我理解它为什么包含 LDFLAGS,但是这里的 CFLAGS 的目的是什么?
(我猜你在某些 Linux 系统上使用 GNU make)
您对 CFLAGS
的使用是正确的(但我会在此处添加 -g
)。但我不确定您是否需要 -isystem $(SQLITEDIR)
,它可能可以改为 -I $(SQLITEDIR)
。 GCC 的 -isystem
directory option 很少有用。
首先阅读有关 Invoking GCC, assuming you are using the GCC compiler. BTW, you could have CC= gcc
in your Makefile
. If your compiler is not GCC but something else (e.g. Clang/LLVM) 的文档。
然后,运行 make -p
了解你的 GNU make 的内置规则(有很多)。您会发现许多内置规则都使用 CFLAGS
等。这就是为什么在 Makefile
中使用 CFLAGS
变量更简单;如果可能,利用 make
.
已知的一些内置规则
顺便说一句,您可以避免使用任何内置规则和变量,但那样品味很差。
POSIX 标准定义了 cc
和 make
理解的一些选项(以及 make
的一些最小规则)。 GCC 和 GNU make 都有更多。阅读 documentation of GNU make.
CFLAGS
通常包含一些(优化或其他)标志(例如 -O
或 -g
,或 -pthread
),这些标志也与 linking 步骤(假设您使用 gcc
link,这将调用 ld
)。这就是为什么您通常 link 使用 gcc
(如食谱中的 $(CC)
)同时使用 LDFLAGS
和 CFLAGS
。
您可以使用 make --trace
甚至 remake (as remake -x
) to debug your Makefile
。
在我的 C 项目的 makefile 中,我将 CFLAGS 变量设置如下 -
CFLAGS=-ansi -pedantic -Wall -Wextra -O2 -isystem $(SQLITEDIR)
我希望这个变量用于构建目标文件的规则,因为标志会影响编译步骤
但是,在 GNU make 手册中
https://www.gnu.org/software/make/manual/make.html#Using-Implicit
我看到下面的例子-
foo : foo.o bar.o
cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
我认为这是链接步骤的规则,所以我理解它为什么包含 LDFLAGS,但是这里的 CFLAGS 的目的是什么?
(我猜你在某些 Linux 系统上使用 GNU make)
您对 CFLAGS
的使用是正确的(但我会在此处添加 -g
)。但我不确定您是否需要 -isystem $(SQLITEDIR)
,它可能可以改为 -I $(SQLITEDIR)
。 GCC 的 -isystem
directory option 很少有用。
首先阅读有关 Invoking GCC, assuming you are using the GCC compiler. BTW, you could have CC= gcc
in your Makefile
. If your compiler is not GCC but something else (e.g. Clang/LLVM) 的文档。
然后,运行 make -p
了解你的 GNU make 的内置规则(有很多)。您会发现许多内置规则都使用 CFLAGS
等。这就是为什么在 Makefile
中使用 CFLAGS
变量更简单;如果可能,利用 make
.
顺便说一句,您可以避免使用任何内置规则和变量,但那样品味很差。
POSIX 标准定义了 cc
和 make
理解的一些选项(以及 make
的一些最小规则)。 GCC 和 GNU make 都有更多。阅读 documentation of GNU make.
CFLAGS
通常包含一些(优化或其他)标志(例如 -O
或 -g
,或 -pthread
),这些标志也与 linking 步骤(假设您使用 gcc
link,这将调用 ld
)。这就是为什么您通常 link 使用 gcc
(如食谱中的 $(CC)
)同时使用 LDFLAGS
和 CFLAGS
。
您可以使用 make --trace
甚至 remake (as remake -x
) to debug your Makefile
。