如何在Cygwin下阻止gcc将".exe"添加到已编译的可执行文件中?

Cry*_*uck 5 c gcc cygwin

我想知道如何防止Cygwin下的gcc自动将.exe扩展名添加到编译文件中,因为我只是让自己与"丢失的文件"混淆了很多.对于上下文,我正在研究大学的C项目,我通常在运行Ubuntu的实验室工作(使用Windows进行双启动),但是在家工作我更喜欢使用我的Windows机器ergo Cygwin.如果我只是删除扩展它在任何一个系统上仍然可以正常工作,但每当我在Cygwin下编译它时,必须更改命令以包含扩展是相当令人沮丧的.

我从Cygwin查找了FAQ,发现它可能是与.bashrc或.bash_profile中的环境变量有关的问题(见这里),但我不是命令行忍者,对编辑配置文件不太熟悉.我发现两个相关的问题也表现出相同的行为,但与尝试改变它没有任何关系:

用gcc编译(windows上的cygwin)

在cygwin下使用gcc生成的可执行文件

有任何想法吗?

编辑:它实际上是C项目中的MPI所以我有一个调用mpicc的Makefile,但这与问题并不相关,因为我只是尝试使用gcc,两者都做同样的事情.出于这个问题的目的,我得到的命令和输出是:

$ gcc -o hello hello.c
$ ls
hello.c    hello.exe
$./hello
Hello, world!
$./hello.exe
Hello, world!
Run Code Online (Sandbox Code Playgroud)

请注意,使用或不使用扩展名运行在shell中执行相同的操作,但它不适用于mpirun,这就是我想要更改此行为的原因.

编辑:我最终认为Windows不是我的编程环境.从现在开始,可以在Linux中完成的所有工作都将是.谢谢大家.

Jen*_*ens 2

可执行文件的自动 exe 扩展名的存在是有原因的(Windows 需要它)。您应该消除自己的困惑(又名教育:-)并接受 Cygwin 的工作方式。这是一个深深植根于 Cygwin/Windows 内部的功能,没有它几乎不可能运行。

如果您想以不同的方式体验“Windows 上的 Unix 感觉”,您可以查看AT&T 的 UWin

  • 实际上Windows NT内核和API不需要.exe扩展名。这就是为什么你可以从 Cygwin 中的程序中删除扩展,它仍然可以正常执行。如果添加“.”,也可以让这样的程序在 cmd.exe 中运行。添加到 `PATHEXT` 环境变量,如下所示:`set PATHEXT=.;%PATHEXT%`。但我不知道有什么方法可以让它们在 Windows 资源管理器中工作。 (3认同)