想调试一个开源的项目程序,但项目只提供了makefile文件,只能永nmake来编译连接,不能编译,问一下是否可以恢复成vc6的dsp工程?
我看其makefile是由vc环境生成的,突发此问,高手赐教另外,有一个问题不是太明确,这个开源的程序中的很多cpp竟然不包含它所使用的头文件,但nmake命令是可以编译连接的,搞到vc环境下就一大堆错误,所以我想知道是不vc6可以设置默认的头文文件路径,而不用在具体的工程中#include?
呵呵,多谢了

解决方案 »

  1.   

    可以根据 makefile 添加对应类型的工程, 并把文件放到工程中.
      

  2.   

    Project->Settings->C/C++ 
    Category选Preprocessor
    Additional Include directories
      

  3.   

    直接说吧,我用的是unrar的源代码,代码中只给了makefile文件,只能用nmake命令编译,我怎么根据它来构建我的工程?
      

  4.   

    >...用nmake命令编译,我怎么根据它来构建我的工程?
    ------------------------------------------
    比如你有一个 MyMFC.mak 文件, 以下是其中的一段:!ELSEIF  "$(CFG)" == "MyMFC - Win32 Debug"OUTDIR=.\Debug
    INTDIR=.\Debug
    # Begin Custom Macros
    OutDir=.\Debug
    # End Custom MacrosALL : "$(OUTDIR)\MyMFC.exe"
    CLEAN :
    -@erase "$(INTDIR)\ColorEdit.obj"
    -@erase "$(INTDIR)\Dialog2.obj"
    -@erase "$(INTDIR)\MyBar.obj"
    -@erase "$(INTDIR)\MyGraphics.obj"
    -@erase "$(INTDIR)\MyMFC.obj"
    -@erase "$(INTDIR)\MyMFC.pch"
    -@erase "$(INTDIR)\MyMFC.res"
    -@erase "$(INTDIR)\MyMFCDlg.obj"
    -@erase "$(INTDIR)\MyRich.obj"
    -@erase "$(INTDIR)\MyTest.obj"
    -@erase "$(INTDIR)\StdAfx.obj"
    -@erase "$(INTDIR)\vc60.idb"
    -@erase "$(INTDIR)\vc60.pdb"
    -@erase "$(OUTDIR)\MyMFC.exe"
    -@erase "$(OUTDIR)\MyMFC.ilk"
    -@erase "$(OUTDIR)\MyMFC.pdb""$(OUTDIR)" :
        if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"CPP=cl.exe
    CPP_PROJ=/nologo /Gz /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "NOMINMAX" /D "_AFXDLL" /Fp"$(INTDIR)\MyMFC.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c .c{$(INTDIR)}.obj::
       $(CPP) @<<
       $(CPP_PROJ) $< 
    <<----------------------------------------
    则第一行:
    !ELSEIF  "$(CFG)" == "MyMFC - Win32 Debug"
    表示这下面的 makefile 是工程 MyMFC 的 Debug 方式的 makefile 内容接下来,OUTDIR=.\Debug 表示工程当前目录的 Debug 目录下输出编译产生的文件。
    ALL : "$(OUTDIR)\MyMFC.exe" 表示最终将生成一个 MyMFC.exe 文件。然后
    CLEAN :
    -@erase "$(INTDIR)\ColorEdit.obj"
    -@erase "$(INTDIR)\Dialog2.obj"
    -@erase "$(INTDIR)\MyBar.obj"
    -@erase "$(INTDIR)\MyGraphics.obj"
    -@erase "$(INTDIR)\MyMFC.obj"
    -@erase "$(INTDIR)\MyMFC.pch"
    -@erase "$(INTDIR)\MyMFC.res"
    -@erase "$(INTDIR)\MyMFCDlg.obj"
    -@erase "$(INTDIR)\MyRich.obj"
    -@erase "$(INTDIR)\MyTest.obj"
    -@erase "$(INTDIR)\StdAfx.obj"
    -@erase "$(INTDIR)\vc60.idb"
    ....表示当你选择 Clean 命令时,IDE 将清除这些文件,其中 *.obj 是我们关心的,
    它是生成的是中间文件,也就是说每个 *.obj 分别对应着一个 *.cpp 文件(或者 *.c 文件)
    所以,在 MyMFC 工程中就有下面一些文件(后缀为 .cpp 或者 .c, 这里就当是 .cpp)
    ColorEdit.cpp
    Dialog2.cpp 
    MyBar.cpp
    MyGraphics.cpp
    MyMFC.cpp
    MyMFCDlg.cpp
    MyRich.cpp
    MyTest.cpp
    StdAfx.cpp所以可以新建一个名为 MyMFC 的 project, 再把这些文件添加到其中。
      

  5.   

    后面的几行与编译有关, 如:
    "$(OUTDIR)" :
        if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
    表示如果$(OUTDIR)目录不存在, 则生成一个.CPP=cl.exe
    表示编译器为 cl.exeCPP_PROJ=/nologo /Gz /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "NOMINMAX" /D "_AFXDLL" /Fp"$(INTDIR)\MyMFC.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
    表示 Debug 编译选项, 确定你新建成的工程里的选项与之一致.