示例#1
0
    public static void CreateMakeTargetsFromProject(Make.Generator generator, Project project)
    {
        List <string> objFiles = new List <string>();

        foreach (string file in project.Files)
        {
            string targetName = project.Name + "_" + Path.GetFileNameWithoutExtension(file) + ".obj";
            objFiles.Add(targetName);

            Make.Target targetRes = new Make.Target();
            targetRes.Name         = targetName;
            targetRes.Dependencies = new string[] { file };
            targetRes.Commands     = new Make.Command[] {
                new Make.Command("cl", new string[] { "/c", file, "/Fo:", targetName })
            };

            generator.AddTarget(targetRes);
        }

        switch (project.Type)
        {
        case ProjectType.Executable:
            generator.AddTarget(CreateTargetForExecutable(objFiles, generator, project));
            break;

        case ProjectType.StaticLibrary:
            generator.AddTarget(CreateTargetForStaticLibrary(objFiles, generator, project));
            break;

        case ProjectType.DynamicLibrary:
            break;

        default: throw new Exception();
        }
    }
示例#2
0
    public static Make.Target CreateTargetForExecutable(List <string> objFiles, Make.Generator generator, Project project)
    {
        Make.Target target = new Make.Target();

        string name = project.Name + ".exe";

        List <string> arguments = new List <string>();

        arguments.AddRange(objFiles);

        if (project.ProjectDependencies != null)
        {
            foreach (string dep in project.ProjectDependencies)
            {
                arguments.Add(dep + ".lib");
                objFiles.Add(dep + ".lib");
            }
        }

        arguments.Add("/Fe:");
        arguments.Add(name);

        target.Name         = name;
        target.Dependencies = objFiles.ToArray();
        target.Commands     = new Make.Command[] { new Make.Command("cl", arguments.ToArray()) };

        return(target);
    }
示例#3
0
    public static Make.Target CreateTargetForStaticLibrary(List <string> objFiles, Make.Generator generator, Project project)
    {
        Make.Target target = new Make.Target();

        string name = project.Name + ".lib";

        List <string> arguments = new List <string>();

        arguments.Add("/out:" + name);
        arguments.AddRange(objFiles);

        target.Name         = name;
        target.Dependencies = objFiles.ToArray();
        target.Commands     = new Make.Command[] {
            new Make.Command("lib", arguments.ToArray())
        };

        return(target);
    }