簡體   English   中英

ming32-make使用g ++而不是cc或gcc來編譯.c源文件

[英]ming32-make is using g++ instead of cc or gcc to compile a .c source file

我最近安裝了mingw-w64來學習c而不需要cygwin。 問題是mingw32-make使用g ++來編譯我的.c源代碼,但我真的不知道為什么。 這里說明了這種行為:

這里是來源:

#include <stdio.h>
int main(int argc, char *argv[])
{
    puts("Hello world.");
    return 0;
}

這是makefile:

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規則之前,似乎COMPLO.C規則與hello_world.c匹配; COMPILE.C是編譯C ++的默認規則,因此使用適當的編譯器。

如你所知,設置CXX = gcc是kludgy,從根本上說是錯誤的; 如果您的項目擴展到需要混合的C和C ++組件,它將會中斷。 更合適的解決方案是提供您自己的規則...顯式規則或模式規則,以指示mingw32-make使用$(CC)來編譯* .c(和* .C)文件,以便內置默認規則將不適用。 然后,您可以保留CXX = g ++以編譯任何* .cpp文件(建議與MSVC約定兼容),您的項目可能包含這些文件。

這已經被證實是GNU Make中的一個問題,存在於啟用了不區分大小寫的文件系統選項的構建中。 它也已在存儲庫中修復。

解決方案是使用GNU Make構建,該構建沒有啟用case-insensitve文件系統選項(啟用--enable-case-insensitive-file-system / HAVE_CASE_INSENSITIVE_FS ),或者使用最新源( 版本或更新版本),問題得到解決的地方。

進一步參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM