在编译时CC=$CC make 和 make CC=$CC 有什么不同请提供官方文档和例子来说明
在编译时,CC=$CC make 和 make CC=$CC 之间的差异在于环境变量 CC 的设置方式不同。
-
CC=$CC make:这是通过在命令行上设置环境变量CC的值,然后在执行make命令时使用该值。在这种情况下,make工具将使用环境变量中设置的CC值作为编译器。 -
make CC=$CC:这是在执行make命令时,通过在命令行上设置变量CC来传递给make工具。在这种情况下,make工具将使用传递的CC值作为编译器。
两种方法的主要区别在于变量的作用范围。使用 CC=$CC make 将会设置环境变量 CC 的值,并使得 make 命令及其子进程都可以访问到该值。而使用 make CC=$CC 则是将变量 CC 作为 make 命令的参数传递给 make 工具,在 make 命令的执行过程中,CC 的值将会被使用,但不会影响到环境变量 CC 的值。
以下是官方文档和示例:
根据 GNU Make 官方文档(https://www.gnu.org/software/make/manual/make.html#Using-Variables),在命令行上设置变量的方式如下:
make [variable=value ...] [target ...]
根据该文档,可以使用 make CC=$CC 的方式来为 make 命令设置变量。
以下是一个示例,展示了 CC=$CC make 和 make CC=$CC 的不同效果:
假设有一个名为 test.c 的简单 C 语言源文件,我们可以使用以下 Makefile 来编译它:
CC = gcc
all: test
test: test.o
$(CC) -o test test.o
test.o: test.c
$(CC) -c test.c
clean:
rm -f test test.o
现在,我们可以使用 CC=$CC make 和 make CC=$CC 来编译该程序:
- 使用
CC=$CC make:
$ CC=clang make
clang -c test.c
clang -o test test.o
在这个示例中,我们通过 CC=clang 设置了环境变量 CC 的值为 clang,然后执行 make 命令。make 工具使用了环境变量中设置的 CC 值作为编译器,因此它使用 clang 编译了 test.c 并生成了可执行文件 test。
- 使用
make CC=$CC:
$ make CC=clang
clang -c test.c
clang -o test test.o
在这个示例中,我们使用了 make CC=clang 命令来设置变量 CC 的值为 clang,然后执行 make 命令。make 工具使用了传递的 CC 值作为编译器,因此它同样使用 clang 编译了 test.c 并生成了可执行文件 test。
无论是使用 CC=$CC make 还是 make CC=$CC,在这个示例中都能够成功编译程序。然而,它们的区别在于变量的作用范围。使用 CC=$CC make 将会设置环境变量 CC 的值,并使得 make 命令及其子进程都可以访问到该值。而使用 make CC=$CC 则是将变量 CC 作为 make 命令的参数传递给 make 工具,在 make 命令的执行过程中,CC 的值将会被使用,但不会影响到环境变量 CC 的值。
原文地址: https://www.cveoy.top/t/topic/i3tj 著作权归作者所有。请勿转载和采集!