2013-05-13 14 views
5

Tôi muốn biết làm thế nào tôi có thể ngăn chặn gcc dưới Cygwin tự động thêm phần mở rộng .exe vào các tệp được biên dịch, vì tôi vừa gây ra nhiều nhầm lẫn với "tệp bị thiếu". Đối với bối cảnh, tôi đang làm việc trên một dự án C cho trường đại học và tôi thường làm việc trong các phòng thí nghiệm chạy Ubuntu (khởi động kép với Windows), nhưng để làm việc ở nhà tôi thích sử dụng máy Windows của tôi, ergo Cygwin. Nếu tôi chỉ loại bỏ phần mở rộng nó vẫn hoạt động tốt trên một trong hai hệ thống, nhưng nó là khá bực bội để phải thay đổi lệnh để bao gồm phần mở rộng bất cứ khi nào tôi vừa biên dịch nó dưới Cygwin.Làm thế nào tôi có thể ngừng gcc dưới Cygwin từ việc thêm ".exe" vào các tệp thực thi được biên dịch?

Tôi đã tra cứu các câu hỏi thường gặp từ Cygwin để thấy rằng có thể là vấn đề liên quan đến biến môi trường trong .bashrc hoặc .bash_profile (see here), nhưng tôi không có dòng lệnh ninja và không quen thuộc với cấu hình chỉnh sửa file ... tôi tìm thấy hai câu hỏi liên quan cũng cho thấy các hành vi tương tự, nhưng không có gì để làm với cố gắng thay đổi nó:

Compiling with gcc (cygwin on windows)

Executable file generated using gcc under cygwin

Bất kỳ ý tưởng? EDIT: Nó thực sự là một MPI trong C dự án vì vậy tôi có một Makefile gọi mpicc nhưng đó không phải là thực sự có liên quan đến vấn đề, kể từ khi tôi chỉ cố gắng với gcc là tốt và cả hai làm điều tương tự. Với mục đích của câu hỏi này, các lệnh và kết quả tôi nhận được là:

$ gcc -o hello hello.c 
$ ls 
hello.c hello.exe 
$./hello 
Hello, world! 
$./hello.exe 
Hello, world! 

Lưu ý rằng chạy có hoặc không có phần mở rộng làm điều tương tự trong vỏ, nhưng nó không có mpirun đó là lý do tôi muốn thay đổi hành vi này.

EDIT: Tôi cuối cùng đã quyết định rằng Windows không phải là môi trường lập trình cho tôi. Từ bây giờ, mọi công việc có thể được thực hiện trong Linux sẽ là. Cảm ơn tất cả.

+0

Dòng lệnh bạn đang sử dụng để gọi gcc là gì? –

+0

Điều này không trả lời câu hỏi của bạn, nhưng bạn có thể muốn thử chạy Ubuntu trong một máy ảo như VirtualBox. Sau đó, bạn sẽ không phải lo lắng về bất kỳ vấn đề như thế này và môi trường của bạn ở nhà có thể được chính xác như một trong trường của bạn. –

Trả lời

2

Phần mở rộng exe tự động cho các tệp thực thi có lý do (Windows yêu cầu nó). Bạn nên deconfuse (aka giáo dục :-) mình và chấp nhận cách Cygwin hoạt động. Đây là một tính năng bắt nguồn từ sâu trong ruột Cygwin/Windows mà hầu như không thể làm cho nó chạy mà không có nó.

Đối với "Cảm giác Unix trên Windows" với cách tiếp cận khác mà bạn muốn xem AT&T's UWin.

+0

Cygwin có thực sự cần biên dịch các chương trình với phần mở rộng nếu tôi không sửa đổi cách chúng chạy? Tôi hầu như không sử dụng nó và chỉ thực hiện các chương trình dòng lệnh sẽ chỉ chạy trong Cygwin (ít nhất là trên máy này). Tôi không muốn có Unix trong Windows, nếu tôi đã làm tôi sẽ chỉ cần cài đặt Unix thay vào đó. – Leeward

+2

Trên thực tế, Windows NT kernel và API không yêu cầu phần mở rộng .exe. Đó là lý do tại sao bạn có thể thả phần mở rộng từ một chương trình trong Cygwin và nó vẫn sẽ được thực hiện ok. Bạn cũng có thể lấy một chương trình như vậy để chạy trong cmd.exe nếu bạn thêm ''.'.' với biến môi trường 'PATHEXT', như sau:' set PATHEXT =.;% PATHEXT% '. Tôi không biết một cách để làm cho họ làm việc trong Windows Explorer mặc dù. – ak2

+0

Bạn luôn có thể 'mv foo.exe foo' nếu giải quyết được vấn đề của bạn. – Jens