簡體   English   中英

在Windows系統上使用Emacs編譯C.

[英]Compiling C with Emacs on windows system

我在學校有一點C編程經驗,但它都是Unix。 我想用Emacs編譯一些C,使用Emacs作為第二個IDE。

這樣做最簡單的方法是什么? 我在Emacs中沒有成功編譯helloWorld.c而下載了Cygwin。 即使打開cygwin命令提示符(shell或其調用的任何東西),它也不會將gcc識別為命令。

錯誤
'make'不被識別為內部或外部命令,可操作程序或批處理文件。

我需要一個可以在Windows上運行的編譯器,它是免費的(或者隨Visual Studio一起提供),並且可以與Emacs一起使用。 Mx compile命令之后輸入Emacs的內容也很好。 我看了MinGW,但下載它是一件苦差事。

我希望這個問題有道理。 我常常迷失在開源世界。

環境
安裝了Windows XP,Visual Studio 2010,Emacs 23.2.1,Windows 7.1 SDK,Cygwin

我使用Visual Studio作為編輯器,使用emacs作為編輯器。

只需安裝Visual Studio C ++ 2010 Express Edition即可。 然后我做的是編寫一個nmake Makefile並從Visual Studio命令提示符調用nmake(可從程序菜單訪問)。 這適用於較小的項目。

有關詳細信息,請參閱http://msdn.microsoft.com/en-us/library/f35ctcxw.aspx

對於較大的項目,您可以在Visual Studio中創建解決方案,只需使用emacs作為編輯器。 您還可以從命令提示符調用msbuild來構建解決方案。

此外,visual studio命令提示符只是調用vcvars.bat(或類似的東西)來設置必要的環境。 我想你可能能夠修改emacs shell以指向在啟動時運行此bat文件的cmd實例?

你試圖在Windows上做的任何這種事情都將是一件“苦差事”,因為你試圖將來自不同來源的組件放在一起。 如果您想要簡單,請使用打包在一起的IDE和編譯器,例如Visual Studio免費版,或Code Blocks,或Dev C ++等。

我的理解是Mx編譯提示符正在尋找一個shell命令,在emacs運行的shell的路徑中,你當然可以設置它。 取決於你擁有的windows的emacs版本,默認情況下可能是windows shell,或者它可能是MINGW或cygwin下的bash。

要在cygwin下獲取gcc和make等,你必須從cygwin包中選擇這些來安裝(使用cygwin安裝程序本身就是一項晦澀難懂的技能)。 Cygwin的gcc默認會編譯依賴於cygwin dll的東西,但是你也可以使用-mno-cygwin標志為gcc制作mingw風格的windows可執行文件,或者運行mingw的gcc而不是cygwin。

據推測,emacs甚至可以啟動Visual Studio編譯器,如果你找到適當的命令行,或者它的make實用程序,或者你可以從gnu make運行它。 混合和匹配時可能遇到的問題是Windows與unix路徑,可執行路徑包含必要的工具,以及外部編譯器可能以IDE無法解析的方式格式化錯誤以使其可點擊的可能性。 所有這些都可以解決(例如,在項目的一個階段,我有一個sed腳本重新格式化GCC交叉錯誤,使它們可以在Visual Studio的編譯器錯誤窗口中單擊)

你不需要gcc或cygwin來編譯Windows上的C代碼。

我在emacs 23.2中使用編譯器,make實用程序,鏈接器以及(免費)Microsoft Visual-C ++ Express版本和(免費)Windows SDK附帶的其他工具。

一些提示:

  • 在.emacs文件中使用它:
    (eval-after-load "compile"
       '(progn
          (setq compilation-scroll-output "first-error")
          (setq-default compile-command "nmake ")))

  • 將相應的錯誤消息regexii添加到編譯錯誤regexp列表中。 像這樣:
    (mapcar

     (lambda (x)
       (add-to-list 'compilation-error-regexp-alist-alist x))

     (list
     ;; Microsoft C/C++:
     ;;  keyboard.c(537) : warning C4005: 'min' : macro redefinition
     ;;  d:\tmp\test.c(23) : error C2143: syntax error : missing ';' before 'if'
     ;;  .\cppcli1.cpp(36): error C2059: syntax error : 'public'
     ;;  e:\projects\myce40\tok.h(85) : error C2236: unexpected 'class' '$S1'
     ;;  myc.cpp(14) : error C3149: 'class System::String' : illegal use of managed type 'String'; did you forget a '*'?
     ;;   ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) ?\: \\(error\\|warning\\) C[0-9]+:" 1 3)
      '(msvc "^[ \t]*\\([A-Za-z0-9\\.][^(]*\\.\\(cpp\\|c\\|h\\)\\)(\\([0-9]+\\)) *: +\\(error\\|fatal error\\|warning\\) C[0-9]+:" 1 3)

    ))

    (setq compilation-error-regexp-alist
      (mapcar 'car compilation-error-regexp-alist-alist))

我是Emacs,Cygwin Bash和一般C術語的新手,所以我在這個帖子中找到了一些其他的解釋,其他人對我來說有點困惑。 我最終找到了自己的解決方案。 對於處於類似情況的人,我希望這些簡單的說明有所幫助。 如果有人比我更高級添加我可以更新這篇文章。

  1. 安裝Cygwin。
  2. 在設置屏幕上,進入“devel”文件夾。 如果尚未下載到Cygwin設置中,請選擇“gcc-core”。 完成安裝。
  3. 安裝Emacs。
  4. 找到.emacs文件(Emacs配置文件,在我的主Emacs文件夾中找到我)並添加以下內容:

(setq explicit-shell-file-name "{Path to Cygwin folder}\\\\Cygwin.bat") (setq shell-file-name "bash") (setenv "SHELL" shell-file-name)

在指示的地方設置自己的Cygwin.bat路徑。 請注意,您必須使用Cygwin.bat。 如果直接使用bash.exe,它似乎不起作用。 此外,您可能需要使用雙反斜杠來使轉義字符工作,或者Emacs可能會在啟動時抱怨。

現在,您可以通過進入Emacs並鍵入Mx shell來測試它是否有效。 它應該在新的緩沖區中調出Cygwin bash shell。

例如,通過Cygwin Bash編譯並執行程序“foo.c”:

  1. 編譯: gcc foo.c -o foo.exe 這將構建文件並生成具有相同名稱的可執行文件。
  2. 執行: ./foo.exe 輸出應顯示在Emacs shell緩沖區中。

這對我來說非常有用,我希望對於那些不想通過配置Visual Studio或其他解決方案的人來說,這將是一個簡單的替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM