为什么当我试图编译我的C程序时,用一个以程序命名的文件来为它创建一个应用程序?

为什么当我试图编译我的C程序时,用一个以程序命名的文件来为它创建一个应用程序?,c,gcc,C,Gcc,我曾经尝试编译一个用于国际象棋游戏的C程序(多亏了教程中YouTube的Bluefever软件),但当我去编译程序时,我执行了以下代码行: C:\TDM-GCC-64\>gcc Chess/chess.c Chess/init.c -o chess 编译工作正常(没有语法错误或任何东西),但当我到达文件目录时,我看到了以下内容(蓝色圆圈): 意外的应用程序(但没有病毒!): 这是怎么发生的?这可能与我正在编译的代码行有关,但这背后的“英特尔”是什么?编译器在编译时会自动创建一个可执行文

我曾经尝试编译一个用于国际象棋游戏的C程序(多亏了教程中YouTube的Bluefever软件),但当我去编译程序时,我执行了以下代码行:

C:\TDM-GCC-64\>gcc Chess/chess.c Chess/init.c -o chess
编译工作正常(没有语法错误或任何东西),但当我到达文件目录时,我看到了以下内容(蓝色圆圈):

意外的应用程序(但没有病毒!):


这是怎么发生的?这可能与我正在编译的代码行有关,但这背后的“英特尔”是什么?

编译器在编译时会自动创建一个可执行文件。

这就是您告诉编译器生成的文件


gcc的
-o
选项是输出文件。在本例中,您告诉它创建一个名为
chess
的可执行文件。这正是所创建的。

编译器生成应用程序是正常的

令人惊讶的是可执行文件的位置,它应该在父目录中生成:

 C:\TDM-GCC-64\> gcc Chess/chess.c Chess/init.c -o chess
解释很有趣:

  • 您正在使用Windows操作系统,其中文件名不区分大小写
  • 您指示gcc将可执行文件生成到
    chess
    ,但这是
    chess
    目录的名称。在这种情况下,gcc在命名目录中生成可执行文件,并为其提供一个名称,该名称是第一个源文件
    chess.c
    ->
    chess
    的基本名称
  • 此外,Windows中的应用程序名称实际上是
    chess.exe
    ,但文件管理器的默认设置是不显示文件扩展名。这是一个非常不幸的选择。我建议您在Windows/File Explorer选项窗口中更改此设置,以始终显示文件扩展名。这将允许您更容易地区分
    chess.c
    chess.exe
    chess.h
在Chess目录中有一个
Makefile
,您应该使用
make
命令来构建可执行文件:

 C:\TDM-GCC-64\> make -C Chess
或者只需将
cd
转到
Chess
子目录并键入:

 C:\TDM-GCC-64\Chess> make

您的AV系统识别出已创建新的可执行文件(您的
chess
,或
chess.exe
,程序),并将其检查为无病毒。我想在输出中看到文件名后缀-这是一个您可以设置的选项。您期望得到什么?您键入了发布的命令还是
gcc Chess/Chess.c Chess/init.c-o Chess/Chess
?我键入了发布的命令。实际上,是的,
c:\TDM-gcc-64
中有一个名为
Chess.exe
的文件!是的,但是为什么它是在
Chess
子目录中生成的可执行文件?你确定它是吗?该文件上的时间戳看起来比其他文件旧。也许您曾经在该目录中运行过make,或者之前在那里创建了该文件。@否:我不确定它是在哪里创建的。它可能在父目录中创建为
chess.exe
,而
chess
目录中的
chess.exe
是较旧的可执行文件,可能是由
make
生成的。它是在
TDM-GCC-64
目录中创建的,但我将其移动到了
chess
子目录中。但是,当我执行
make
命令时,它会抛出一个错误,指出
'make'未被识别为内部或外部命令、可操作程序或批处理文件
@ObinnaNwakwue:您可能需要安装
cygwin
。它有很多在Windows中进行C开发的有用工具。实际上我已经有了
cygwin.h
,我想我只需要把它包括进去,就可以让
make
命令正常工作。@ObinnaNwakwue:不,更改源代码不会神奇地让Wndows shell找到
make
命令。这是路径问题或设置问题。您应该运行
cygwin
批处理或命令文件来在窗口中启动bashshell,并在那里运行命令。是的,但是我该如何做呢?