vc2008递归建立一个目录工程

来源:互联网 发布:linux iso镜像百度云 编辑:程序博客网 时间:2024/06/03 19:42

扫描指定目录并递归其子目录的所有文件,生成一个xml的VCMakeTool类型的工程文件.

usage:buildvcproj dir destfilename

example:buildvcproj c://abc abc.xml

#include "stdafx.h" 
#include <windows.h> 

FILE  *g_pFile=NULL; 
const char *g_packsDir=NULL; 
int   g_packsDirLen=0; 

void Build(const char *packsDir, const char *subdir) 

    WIN32_FIND_DATAA FindFileData; 
    HANDLE    hFind = INVALID_HANDLE_VALUE; 
    char    DirSpec[MAX_PATH];  // directory specification 
    DWORD    dwError; 
   
 strcpy(DirSpec,packsDir); 
    int rlen = strlen(DirSpec); 

    if(DirSpec[rlen -1]=='\\') 
    { 
        DirSpec[rlen-1]='0'; 
    } 

    if(subdir&&subdir[0]!=0) 
    { 
        strcat(DirSpec,"\\"); 
        strcat(DirSpec,subdir); 
    } 

    int saveLen = strlen(DirSpec); 
   

    strcat(DirSpec,"\\*");       
    hFind = FindFirstFileA(DirSpec, &FindFileData); 
    DirSpec[saveLen]='\0'; 
    if (hFind != INVALID_HANDLE_VALUE)  
    { 
        do
        { 
            if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY ) 
            { 
                if(FindFileData.cFileName[0]!='.' 
                    && strstr(FindFileData.cFileName,"objchk")==NULL 
                    && strstr(FindFileData.cFileName,"objfre")==NULL 
                    ) 
                { 
                    fprintf(g_pFile,"   <Filter "
                    "\nName=\"%s\""
                    "\nFilter=\"cpp;c;h;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\""
                    "\n>\n",FindFileData.cFileName 
                    ); 
                    Build(DirSpec,FindFileData.cFileName); 
                    fprintf(g_pFile,"%s\n","\n  </Filter>\n"); 
                } 
            } 
            else
            { 
                int len =strlen(FindFileData.cFileName); 
                if(len<4 || strcmpi(FindFileData.cFileName+len-4,".obj")!=0) 
                { 
                    fprintf(g_pFile, 
                    "\n<File"
                    "\nRelativePath=\".%s\\%s\""
                    "\n></File>\n", 
                    DirSpec+g_packsDirLen,FindFileData.cFileName); 
                } 
            } 
        } 
        while (FindNextFileA(hFind, &FindFileData) != 0) ; 
        dwError = GetLastError(); 
        FindClose(hFind); 
    } 

int main(int argc, char* argv[]) 

    if(argc<3) 
    { 
        printf("usage:\nbuildvcproj dir destfilename\n"
            "example:\n"
            "buildvcproj c:\\abc abc.xml\n"); 
        return 0; 
    } 

    g_pFile=fopen(argv[2],"w"); 
    if(g_pFile) 
    { 
        fprintf(g_pFile,"%s", 
                            "<?xml version=\"1.0\" encoding=\"gb2312\"?>"
                            "\n<VisualStudioProject"
                            "\n ProjectType=\"Visual C++\""
                            "\n Version=\"9.00\""
                            "\n Name=\"win2ksrc\""
                            "\n ProjectGUID=\"{8B8C6959-68F6-4182-8EA9-87C1E30EBE9E}\""
                            "\n Keyword=\"MakeFileProj\""
                            "\n TargetFrameworkVersion=\"196613\""
                            "\n >"
                            "\n <Platforms>"
                            "\n     <Platform"
                            "\n     />"
                            "\n </Platforms>"
                            "\n <ToolFiles>"
                            "\n </ToolFiles>"
                            "\n <Configurations>"
                            "\n     <Configuration"
                            "\n         Name=\"Debug|Win32\""
                            "\n         OutputDirectory=\"$(ConfigurationName)\""
                            "\n         IntermediateDirectory=\"$(ConfigurationName)\""
                            "\n         ConfigurationType=\"0\""
                            "\n         >"
                            "\n         <Tool"
                            "\n             Name=\"VCNMakeTool\""
                            "\n             BuildCommandLine=\"\""
                            "\n             ReBuildCommandLine=\"\""
                            "\n             CleanCommandLine=\"\""
                            "\n             Output=\"win2ksrc.exe\""
                            "\n             PreprocessorDefinitions=\"WIN32;_DEBUG\""
                            "\n             IncludeSearchPath=\"\""
                            "\n             ForcedIncludes=\"\""
                            "\n             AssemblySearchPath=\"\""
                            "\n             ForcedUsingAssemblies=\"\""
                            "\n             CompileAsManaged=\"\""
                            "\n         />"
                            "\n     </Configuration>"
                            "\n     <Configuration"
                            "\n         Name=\"Release|Win32\""
                            "\n         OutputDirectory=\"$(ConfigurationName)\""
                            "\n         IntermediateDirectory=\"$(ConfigurationName)\""
                            "\n         ConfigurationType=\"0\""
                            "\n         >"
                            "\n         <Tool"
                            "\n             Name=\"VCNMakeTool\""
                            "\n             BuildCommandLine=\"\""
                            "\n             ReBuildCommandLine=\"\""
                            "\n             CleanCommandLine=\"\""
                            "\n             Output=\"win2ksrc.exe\""
                            "\n             PreprocessorDefinitions=\"WIN32;NDEBUG\""
                            "\n             IncludeSearchPath=\"\""
                            "\n             ForcedIncludes=\"\""
                            "\n             AssemblySearchPath=\"\""
                            "\n             ForcedUsingAssemblies=\"\""
                            "\n             CompileAsManaged=\"\""
                            "\n         />"
                            "\n     </Configuration>"
                            "\n </Configurations>"
                            "\n <References>"
                            "\n </References>"
                            "\n <Files>"
                            "\n "
                            ); 
       
  g_packsDir=argv[1]; 
        g_packsDirLen= strlen(g_packsDir); 
        Build(g_packsDir,""); 
        fprintf(g_pFile,"%s", 
                            "\n </Files>"
                            "\n <Globals>"
                            "\n </Globals>"
                            "\n</VisualStudioProject>"
                            ); 
        fclose(g_pFile); 
    } 
    else
    { 
        printf("Can not open file %s\n",argv[2]); 
    } 
    return 0; 
}

原创粉丝点击