为什么当我试图编译我的C程序时,用一个以程序命名的文件来为它创建一个应用程序?
我曾经尝试编译一个用于国际象棋游戏的C程序(多亏了教程中YouTube的Bluefever软件),但当我去编译程序时,我执行了以下代码行:为什么当我试图编译我的C程序时,用一个以程序命名的文件来为它创建一个应用程序?,c,gcc,C,Gcc,我曾经尝试编译一个用于国际象棋游戏的C程序(多亏了教程中YouTube的Bluefever软件),但当我去编译程序时,我执行了以下代码行: C:\TDM-GCC-64\>gcc Chess/chess.c Chess/init.c -o chess 编译工作正常(没有语法错误或任何东西),但当我到达文件目录时,我看到了以下内容(蓝色圆圈): 意外的应用程序(但没有病毒!): 这是怎么发生的?这可能与我正在编译的代码行有关,但这背后的“英特尔”是什么?编译器在编译时会自动创建一个可执行文
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
目录的名称。在这种情况下,gcc在命名目录中生成可执行文件,并为其提供一个名称,该名称是第一个源文件chess
->chess.c
的基本名称chess
- 此外,Windows中的应用程序名称实际上是
,但文件管理器的默认设置是不显示文件扩展名。这是一个非常不幸的选择。我建议您在Windows/File Explorer选项窗口中更改此设置,以始终显示文件扩展名。这将允许您更容易地区分chess.exe
、chess.c
和chess.exe
chess.h
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,并在那里运行命令。是的,但是我该如何做呢?