2009-04-11 44 views
7

Tôi đã sử dụng Emacs trong một thời gian để chỉnh sửa văn bản cơ bản nhưng đến hôm nay tôi đang cố gắng sử dụng nó để biên dịch C++. Tôi đã tìm vài giờ qua về cách để đi về điều này nhưng tôi tiếp tục đánh roadblock trong kỹ thuật của họ (tôi nghĩ rằng một số điều này là có để làm với các hướng dẫn được lỗi thời).Soạn thảo các chương trình C++ với Emac trên Windows

Về cơ bản, tất cả những gì tôi muốn làm là có thể biên dịch chương trình C++ mà tôi viết trong Emacs thông qua lệnh 'biên dịch M-x'.

Cho đến nay tôi đã cài đặt Cygwin và tải xuống các gói cho gcc. Tôi đã thử một số giải pháp khác được giới thiệu bởi các hướng dẫn trực tuyến nhưng chúng không bị xóa.

Cảm ơn bạn.

Trả lời

3

Lệnh M-x compile gọi ra một vỏ (ví dụ Linux bash, cửa sổ cmd.exe, vv) để chạy các lệnh make. Trên các cửa sổ, tôi nghĩ các emacs mặc định là vỏ cmd.exe (thông qua một tệp thực thi đặc biệt C:/Program Files/Emacs/emacs/bin/cmdproxy.exe).

Nếu bạn muốn M-x compile bạn để sử dụng một lớp vỏ khác nhau (có thể là Cygwin bash trong trường hợp của bạn) sau đó bạn cần phải nói cho emacs thông qua thay đổi shell-file-name biến hoặc sử dụng biến SHELL môi trường. Bạn cũng sẽ cần đảm bảo rằng cygwin make được tìm thấy bằng cách thay đổi số exec-path biến (hoặc sử dụng biến môi trường PATH).

Để làm điều này:

(setq shell-file-name "C:/cygwin/bin/bash.exe") 
(setq exec-path (cons "C:/cygwin/bin" exec-path)) 

Và bạn cũng có thể nhìn vào setup-cygwin.el để thiết lập này và một số thứ khác cho Cygwin.

+0

Điều này làm việc hoàn hảo cho việc chuyển đổi vỏ mặc định thành bash nhưng vì một số lý do nó không tìm ra lệnh thực hiện hoặc lệnh gcc khi tôi cố thực thi chúng. –

+0

thêm cygwin's/usr/bin vào Windows PATH? – Arkadiy

+0

Vâng, tôi đã thêm nó rồi. –

3

Bạn có thể thử MinGW - "Minimalist GNU for Windows." Tôi không thể nhớ ra khỏi đỉnh đầu của tôi cách cấu hình các emacs để gọi các công cụ xây dựng tùy chỉnh từ biên dịch M-x, nhưng nó sẽ là có thể. Đây là một liên kết mà tôi vừa xem qua có thể là một điểm khởi đầu.

http://www.cae.tntech.edu/help/programming/free-programming-tools-windows

+0

Theo mặc định Emacs sẽ gọi thực hiện với biên dịch M-x, và thực hiện có thể được cài đặt với MinGW. Nếu tôi nhớ chính xác, vấn đề duy nhất là thực thi của make thực sự không được đặt tên là make, bạn phải đổi tên nó. –

3

Viết một Makefile cho chương trình của bạn và sử dụng "làm -k" cho "M-x biên dịch", theo đề nghị của các tài liệu Emacs. Sử dụng make (hoặc các công cụ xây dựng tương tự) là thực hành tốt hơn so với gõ lại các dòng lệnh cho GCC nói chung, không chỉ cho Emacs.

+0

Khi thực hiện lệnh make, tôi tiếp tục nhận được thông báo lỗi "start-process-shell-command: quy trình con sinh sản: đối số không hợp lệ". Tôi đã thử sử dụng cả hai 'make -k exercise' và chỉ là 'make exercise' đều cho cùng một lỗi. –

+0

Không thực hiện công việc nếu bạn nhập vào bảng điều khiển? –

+0

Nó hoạt động khi tôi gõ nó trong một cửa sổ cmd bình thường nhưng nếu tôi cố gắng thực hiện thông qua các lệnh emacs m-x shell nó không nhận ra lệnh make. –

7

Sau khi cài đặt trình biên dịch. Bạn có thể sử dụng đoạn mã sau để tùy chỉnh lệnh biên dịch

(add-hook 'c++-mode-hook 
    (lambda() 
    (unless (file-exists-p "Makefile") 
     (set (make-local-variable 'compile-command) 
     (let ((file (file-name-nondirectory buffer-file-name))) 
     (concat "g++ -g -O2 -Wall -o " 
      (file-name-sans-extension file) 
      " " file)))))) 
0

Nếu bạn cài đặt Emacs và g ++ trong Cygwin, nó sẽ hoạt động giống như Linux, có nghĩa là bạn có thể chạy M-x compile và sử dụng g++ myFile.cpp làm lệnh biên dịch của bạn. Nếu bạn đang sử dụng Emacs "bản địa" cho Windows, hoặc trộn Cygwin/MinGW/etc, mọi thứ sẽ phức tạp hơn một chút (và các câu trả lời khác có giải pháp), nhưng nó sẽ giảm xuống để đảm bảo rằng các biến môi trường của bạn được thiết lập chính xác (ví dụ: PATH, SHELL, v.v.). Cuối cùng, nếu bạn không thể chạy nó trên dòng lệnh (hoặc cmd.exe hoặc/bin/bash từ Cygwin hoặc MinGW), nó sẽ không hoạt động trong bất kỳ Emacs nào.

Ví dụ, tôi biên dịch C++ trong Emacs bằng cách sử dụng cả hai SCons/g ++ từ Cygwin và devenv.com từ MS Visual Studio. Điều này tất nhiên đòi hỏi phải cài đặt của SCons và Visual Studio, nhưng nó là có thể. SCons cài đặt từ Cygwinports (http://sourceware.org/cygwinports/) và kết thúc bằng/usr/bin, nằm trong đường dẫn tiêu chuẩn, nhưng devenv.com được chôn sâu trong Visual Studio; để có được quyền truy cập vào nó, tôi thêm nó chứa thư mục để PATH của tôi (trong tôi ~/.bash_profile):

case $OS in 
    Windows_NT) 
     case "`uname -s`" in 
      CYGWIN_NT*) 
       PATH=${PATH}:"/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/" 
       ;; 
      MINGW32_NT*) 
       PATH=${PATH}:"/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/" 
       ;; 
     esac 
esac 

sau đó tôi xây dựng một lệnh biên dịch của một trong hai scons hoặc devenv.com -build "Release|Platform MySolution.sln, và những thứ đi vui vẻ cùng từ đó. Bạn có thể nhận được phức tạp như bạn cần (trong dự án hiện tại của tôi, tôi đã xây dựng và thử nghiệm các kịch bản shell mà chú thích đến sconsdevenv.com; Tôi có xu hướng tránh các tệp bó, vì trình bao mạnh hơn nhiều). Khiếu nại duy nhất của tôi là Microsoft đã thay đổi đầu ra của các lỗi và do đó tự động nhảy vào các dòng mã từ đầu ra trình biên dịch hiện bị hỏng (tôi cần phải xem xét sửa lỗi đó).

Tôi giả định rằng bạn đến từ bản dựng Emacs "bản địa", trong trường hợp đó, bạn cũng có thể thấy hữu ích mô-đun cygwin-mount cho Emacs.

Các vấn đề liên quan