我最近安装了mingw-w64来学习c而不需要cygwin。问题是 mingw32-make 使用 g++ 来编译我的 .c 源代码,但我真的不知道为什么。此处说明了该行为:
这是来源:
#include <stdio.h>
int main(int argc, char *argv[])
{
puts("Hello world.");
return 0;
}
这是生成文件:
CC = gcc -O
CFLAGS=-Wall -g
clean:
rm -f hello_world
使用 gnuwin32 版本的 make:
-> make hello_world
gcc -O -Wall -g hello_world.c -o hello_world
使用 mingw32-make:
-> mingw32-make hello_world
g++ hello_world.c -o hello_world
谁能解释一下,或者知道为什么会这样?使用 Cygwin,也使用 Linux,make 工具按预期使用 c 编译器(通常是 cc)。为什么 mingw32-make 使用 g++ 而不是 gcc。 gcc安装在bin目录下。
mingw-w64 是截至 2 天前的最新 winbuild
最佳答案
mingw32-make(IMO 正确)将文件系统视为不区分大小写,因此 foo.c 和 FOO.C 指的是同一个文件。
您的 makefile 缺少针对 hello_world 目标的任何显式规则,因此必须使用内置的隐式规则;似乎 COMPILE.C 规则在 COMPILE.c 规则之前与 hello_world.c 匹配; COMPILE.C 是编译 C++ 的默认规则,因此使用适当的编译器。
正如您所注意到的,设置 CXX = gcc 是笨拙的,而且根本上是错误的;如果您的项目扩展到需要混合的 C 和 C++ 组件,它就会中断。一个更合适的解决方案是提供你自己的规则......要么是一个显式规则,要么是一个模式规则,以指示 mingw32-make 使用 $(CC) 编译 *.c(和 *.C)文件,以便内置的默认规则将不适用。然后,您可以保留 CXX = g++ 来编译任何 *.cpp 文件(建议与 MSVC 约定兼容),您的项目可能包含这些文件。
关于c++ - mingw32-make 使用 g++ 而不是 cc 或 gcc 来编译 .c 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28531272/