none
使用vs2008的makefile工程編譯驅動的問題 RRS feed

  • 问题

  •  

    使用vs2008makefile工程編譯驅動的問題

    我建立了一個vs2008makefile工程,然後在工程的設置的Build events裏調用批次處理編譯代碼。編譯的結果如下:

    1>------ Build started: Project: CPlusPlu, Configuration: Windows 2000 Checked Build Environment Win32 ------

    1>Performing Pre-Build Event...

    1>BUILD: Adding /Y to COPYCMD so xcopy ops won't hang.

    1>BUILD: Using 2 child processes

    1>BUILD: Object root set to: ==> objfre_w2K_x86

    1>BUILD: Compile and Link for i386

    1>BUILD: Loading e:\WINDDK\3790\build.dat...

    1>BUILD: Computing Include file dependencies:

    1>BUILD: Examining g:\temp\cplusplus directory for files to compile.

    1>    g:\temp\cplusplus

    1>    g:\temp\cplusplus - 2 source files (212 lines)

    1>BUILD: Compiling g:\temp\cplusplus directory

    1>1>Compiling - cplusplus.c for i386

    1>1>Compiling - memorypool.c for i386

    1>1>memorypool.c(2) : error C1083: Cannot open include file: 'Public.h': No such file or directory

    1>1>Compiling - generating code... for i386

    1>BUILD: Compile errors: not linking g:\temp\cplusplus directory

    1>BUILD: Done

    1>    3 files compiled - 1 Error

    1>Build log was saved at "file://g:\Temp\CPlusPlus\Windows 2000 Checked Build Environment\BuildLog.htm"

    1>CPlusPlu - 2 error(s), 0 warning(s)

    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    可以看出調用是成功的。

    但是輸出去消息裏前面多了許多的"1>".

    1>1>memorypool.c(2) : error C1083: Cannot open include file: 'Public.h': No such file or directory

    由於出現了多個"1>"導致VS2008OUTPUT視窗的按錯誤跳轉到指定的代碼行的功能失效。

    我的問題就是,怎麼可以避免前面的多個"1>"?>

    我想,所有使用第三方編譯工具編譯代碼的人都應該有這個問題的。是否可以通過修改編譯器的開關來去掉多餘的字元。

    又或者可以修改VS2008OUTPUT的錯誤跳轉的識別邏輯,可以支援這種多個"1>"的情況。

    2009年1月15日 13:27

答案

全部回复

  • 你可以在external tool里面加build指令。
    2009年1月15日 17:28
    版主
  • 前面那个1>是由于VS2008支持多工程同时编译而加的标示。

    你要是想实现跳转到出错行,选择菜单栏视图->其他窗口-〉错误列表上打上钩就可以了,从错误列表窗口就可以跳转了。

    若是对你有帮助,请标为解决。
    2009年1月16日 1:29
    版主
  • “你可以在external tool里面加build指令”

     

    这个方法是不好的。

    我希望直接使用VC的工程进行编译,这样对VS做的改动最小。

    实际上,也可以看出,编译是正常的,但就是output的错误处理窗口的错误识别出错了。

    使用EXTERNAL TOOL的方法我也尝试过,

    但在使用重定向处理技术处理批处理的输出的时候,DOSKEY.exe会报错。

    虽然也可以用,给人的感觉非常的不舒服。每次编译驱动都要弹两个错误对话框出来。

     

    2009年1月16日 23:35
  • “你要是想实现跳转到出错行,选择菜单栏视图->其他窗口-〉错误列表上打上钩就可以了,从错误列表窗口就可以跳转了。”

    这个方法也是有问题的。

    Error 1 error C1083: Cannot open include file: 'HsKeyPrv.h': No such file or directory 1>memorypool.c
    这个是在错误窗口里选中该行后,拷贝出的文字。

    可以看出,行号没有识别出来。

     

    2009年1月16日 23:39
  • 在google上搜索了“vs2008 错误跳转”,

    http://forums.microsoft.com/china/ShowPost.aspx?PostID=4045868&SiteID=15

    看样子也是这个问题。

    如果需要测试环境的话,

    我可以将一个测试工程发上来。

     

    2009年1月16日 23:49
  •  

    我对这个问题的重现条件做了简化。

    下面一个ErroMess.cpp

    // ErroMess.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"

    #define __STR2__(x) #x
    #define __STR1__(x) __STR2__(x)
    #define __LOC__ __FILE__ "("__STR1__(__LINE__)") : Warning Msg: "

    // collisions.cpp

    int _tmain(int argc, _TCHAR* argv[])
    {
     printf(__LOC__"This is a error message!\r\n");
     printf("1>"__LOC__"This is a error message!\r\n");
     return 0;
    }
    这个是一个控制台的程序,编译运行后,会输出两句错误提示信息。

    错误提示信息的语法为

    http://msdn.microsoft.com/en-us/library/yxkt8b26(VS.80).aspx

    错误提示信息的语句来自

    http://support.microsoft.com/kb/155196

    编译这个控制台后可以生成一个ErroMess.exe的控制台程序;

    随便建立一个vs2008的makefile类别的工程;

    然后在nmake的命令行内输入ErroMess.exe的全路径;

    点击VS的编译按钮,会在OUTPUT的窗口中输出

    1>g:\temp\erromess\erromess\erromess.cpp(14) : Warning Msg: This is a error message!
    1>1>g:\temp\erromess\erromess\erromess.cpp(15) : Warning Msg: This is a error message!

    (g:\temp\erromess\erromess是我的ErroMess的工程路径。)

    鼠标双击错误提示,

    上面一行的可以跳转,

    下面一行的无法跳转。

     

     

    2009年1月17日 0:32
  • 你可以去connect.microsoft.com要求增加一个选项,隐藏这些makefile生成的前缀。
    MSMVP VC++
    2009年2月3日 5:14
    版主