不想一直开着VS占资源,时不时就占25%的CPU,所以想在emacs中通过msbuild编译sln文件,要调试再开VS。
想这样做的原因是,如果一直在emacs里面写代码而不经常编译,写完后编译可能会有一堆错误,如果经常切换vs编译,也很影响状态,所以能在emacs中编译最好。
好在摸索到办法了,设置compile-command为build.bat,bat文件中写编译命令:
@echo off
call "D:\software\VisualStudio2015\VC\bin\vcvars32.bat"
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" "c:\work\projs\Cpp\Cpp.sln" /p:Configuration=Debug /p:Platform=x86 /m:2
M-x compile 后下面是*compilation* buffer的输出:
7>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\shlobj.h(1151): warning C4091: “typedef ”: 没有声明变量时忽略“tagGPFIDL_FLAGS”的左侧 [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>c:\work\proj\cpp\dlib\Core/UIManager.h(56): warning C4091: “typedef ”: 没有声明变量时忽略“Dlib::EVENTTYPE_UI”的左侧 [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>c:\work\proj\cpp\dlib\Core/UIManager.h(64): warning C4091: “typedef ”: 没有声明变量时忽略“Dlib::MSGTYPE_UI”的左侧 [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>c:\work\proj\cpp\cpp\Bit.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>c:\work\proj\cpp\cpp\Bit.h(644): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>main.cpp(36): error C2144: 语法错误:“void”的前面应有“;” [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>main.cpp(36): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int [c:\work\proj\Cpp\Cpp\Cpp.vcxproj]
7>已完成生成项目“c:\work\proj\Cpp\Cpp\Cpp.vcxproj”(默认目标)的操作 - 失败。
6>已完成生成项目“c:\work\proj\Cpp\Cpp\Cpp.vcxproj.metaproj”(默认目标)的操作 - 失败。
1>已完成生成项目“c:\work\proj\Cpp\Cpp.sln”(默认目标)的操作 - 失败。
这时M-x next-error 后会定位到 warning,由于有很多warning,我想直接定位到 error 而不是warning,
看了compilation-error-regexp-alist,正则太长有点头大,不知道怎么设置,当前值是:
compilation-error-regexp-alist is a variable defined in ‘compile.el’.
Its value is
(("^\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^:(
]+\\)(\\([0-9]+\\)) : \\(?:fatal error\\|warnin\\(g\\)\\) C[0-9]+:" 2 3 nil
(4))
absoft ada aix ant bash borland python-tracebacks-and-caml cmake cmake-info comma cucumber msft edg-1 edg-2 epc ftnchek iar ibm irix java jikes-file maven jikes-line clang-include gcc-include ruby-Test::Unit gnu lcc makepp mips-1 mips-2 msft omake oracle perl php rxp sparc-pascal-file sparc-pascal-line sparc-pascal-example sun sun-ada watcom 4bsd gcov-file gcov-header gcov-nomark gcov-called-line gcov-never-called perl--Pod::Checker perl--Test perl--Test2 perl--Test::Harness weblint guile-file guile-line)
Original value was
(absoft ada aix ant bash borland python-tracebacks-and-caml cmake cmake-info comma cucumber msft edg-1 edg-2 epc ftnchek iar ibm irix java jikes-file maven jikes-line clang-include gcc-include ruby-Test::Unit gnu lcc makepp mips-1 mips-2 msft omake oracle perl php rxp sparc-pascal-file sparc-pascal-line sparc-pascal-example sun sun-ada watcom 4bsd gcov-file gcov-header gcov-nomark gcov-called-line gcov-never-called perl--Pod::Checker perl--Test perl--Test2 perl--Test::Harness weblint guile-file guile-line)