在Windows系统上使用Emacs编译C.

时间:2010-12-29 17:41:54

标签: c visual-studio emacs windows-xp

我在学校有一点C编程经验,但这都是Unix。我想用Emacs编译一些C,使用Emacs作为第二个IDE。

最简单的方法是做什么?我在Emacs中没有成功编译helloWorld.c而下载了Cygwin。即使打开cygwin命令提示符(shell或其调用的任何东西),它也不会将gcc识别为命令。

错误
'make'不被识别为内部或外部命令,可操作程序或批处理文件。

我需要一个可以在Windows上运行的编译器,它是免费的(或随Visual Studio一起提供),并且可以与Emacs一起使用。在M-x compile命令之后输入Emacs的内容也很好。我看了MinGW,但下载它是一件苦差事。

我希望这个问题有道理。我常常迷失在开源世界中。

环境
安装了Windows XP,Visual Studio 2010,Emacs 23.2.1,Windows 7.1 SDK,Cygwin

4 个答案:

答案 0 :(得分:4)

我使用Visual Studio作为编辑器,将emacs作为编辑器。

只需安装Visual Studio C ++ 2010 Express Edition即可。 然后我做的是编写一个nmake Makefile并从中调用nmake Visual Studio命令提示符(可从“程序”菜单访问)。 这适用于较小的项目。

参见http://msdn.microsoft.com/en-us/library/f35ctcxw.aspx 了解更多详情。

对于较大的项目,您可以在Visual Studio中创建解决方案 只需使用emacs作为编辑器。你也可以从中调用msbuild 命令提示符以构建解决方案。

此外,visual studio命令提示符只调用vcvars.bat(或类似的东西) 建立必要的环境。我想你可能能够修改emacs shell以指向在启动时运行此bat文件的cmd实例?

答案 1 :(得分:3)

您尝试在Windows上执行的任何此类操作都将成为一项“苦差事”,因为您正在尝试将来自不同来源的组件放在一起。如果您想要简单,请使用打包在一起的IDE和编译器,例如Visual Studio免费版,或Code Blocks,或Dev C ++等。

我的理解是M-x编译提示符正在寻找一个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。

如果你为它或它的make实用程序找到一个合适的命令行,或者你可以从gnu make运行它,大概emacs甚至可以启动Visual Studio编译器。混合和匹配时可能遇到的问题是Windows与unix路径,可执行路径包含必要的工具,以及外部编译器可能以IDE无法解析的方式格式化错误以使其可点击的可能性。所有这些都可以解决(例如,在项目的一个阶段,我有一个sed脚本重新格式化GCC交叉错误,使它们可以在Visual Studio的编译器错误窗口中单击)

答案 2 :(得分:3)

您不需要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))

答案 3 :(得分:2)

我是Emacs,Cygwin Bash和一般C术语的新手,所以我在这个帖子中找到了一些其他解释,其他人对我来说有点困惑。我最终找到了自己的解决方案。对于处于类似情况的人,我希望这些简单的说明有所帮助。如果任何比我更高级的人添加我可以更新这篇文章。

  1. 安装Cygwin。
  2. 在设置屏幕上,进入" devel"夹。选择" gcc-core"如果它尚未下载到您的Cygwin设置中。完成安装。
  3. 安装Emacs。
  4. 找到.emacs文件(Emacs配置文件,在我的主Emacs文件夹中找到我)并添加以下内容:
  5. (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并输入M-x shell来测试它是否有效。它应该在一个新的缓冲区中调出Cygwin bash shell。

    作为一个例子,编译并执行程序" foo.c"通过Cygwin Bash:

    1. 编译:{{1​​}}。这将构建文件并生成具有相同名称的可执行文件。
    2. 执行:gcc foo.c -o foo.exe。输出应显示在Emacs shell缓冲区中。
    3. 这对我来说效果非常好,我希望对于那些不想通过配置Visual Studio或其他解决方案的人来说,这将是一个简单的替代方案。