Пример #1
0
        public Process StartBuild(CMakeEnv cmakeEnv, string pathToBuild,
                                  CMakeBuildConfig config = null, ModifyStartInfo modifyStartInfo = null)
        {
            var startInfo = new ProcessStartInfo()
            {
                FileName  = cmakeEnv.CMakeBin,
                Arguments = $"--build \"{Path.GetFullPath(pathToBuild)}\""
            };

            if (config?.Target != null)
            {
                var targetArg = string.Join(" ", config.Target.Select(x => $"\"{x}\""));
                startInfo.Arguments += $" --target {targetArg}";
            }
            if (config?.Config != null)
            {
                startInfo.Arguments += $" --config {config.Config}";
            }
            if (config != null && config.CleanFirst)
            {
                startInfo.Arguments += $" --clean-first";
            }
            ApplyKitEnv(startInfo.EnvironmentVariables);
            modifyStartInfo?.Invoke(startInfo);
            return(Process.Start(startInfo));
        }
Пример #2
0
        public Process StartConfigure(CMakeEnv cmakeEnv, string pathToSource, string pathToBuild,
                                      CMakeConfigureConfig config = null, ModifyStartInfo modifyStartInfo = null)
        {
            var settings = new Dictionary <string, CMakeSetting>();

            if (kitInfo.PreferredGenerator != null)
            {
                if (kitInfo.PreferredGenerator.Name != null)
                {
                    settings["CMAKE_GENERATOR"] = new CMakeSetting(kitInfo.PreferredGenerator.Name);
                }
                if (kitInfo.PreferredGenerator.Toolset != null)
                {
                    settings["CMAKE_GENERATOR_TOOLSET"] = new CMakeSetting(kitInfo.PreferredGenerator.Toolset);
                }
                if (kitInfo.PreferredGenerator.Platform != null)
                {
                    settings["CMAKE_GENERATOR_PLATFORM"] = new CMakeSetting(kitInfo.PreferredGenerator.Platform);
                }
            }
            if (kitInfo.Compilers != null)
            {
                foreach (var compiler in kitInfo.Compilers)
                {
                    settings[$"CMAKE_{compiler.Key}_COMPILER"] = new CMakeSetting(compiler.Value, "FILEPATH");
                }
            }
            if (!string.IsNullOrEmpty(kitInfo.ToolchainFile))
            {
                settings["CMAKE_TOOLCHAIN_FILE"] = new CMakeSetting(kitInfo.ToolchainFile, "FILEPATH");
            }
            if (config?.UserSettings != null)
            {
                foreach (var userSetting in config.UserSettings)
                {
                    settings[userSetting.Key] = userSetting.Value;
                }
            }
            var settingsArgs = string.Join(" ", settings.Select(x =>
                                                                x.Value.Type == null ?
                                                                $"\"-D{x.Key}={x.Value.Value}\"" :
                                                                $"\"-D{x.Key}:{x.Value.Type}={x.Value.Value}\""));
            var arguments = $"-S \"{Path.GetFullPath(pathToSource)}\" -B \"{Path.GetFullPath(pathToBuild)}\"";

            if (!string.IsNullOrEmpty(settingsArgs))
            {
                arguments += " " + settingsArgs;
            }
            if (config == null || config.NoWarnUnusedCli)
            {
                arguments += " --no-warn-unused-cli";
            }
            var startInfo = new ProcessStartInfo()
            {
                FileName  = cmakeEnv.CMakeBin,
                Arguments = arguments
            };

            ApplyKitEnv(startInfo.EnvironmentVariables);
            modifyStartInfo?.Invoke(startInfo);
            return(Process.Start(startInfo));
        }
Пример #3
0
 public Process StartConfigure(CMakeEnv cmakeEnv, string pathToSource, string pathToBuild,
                               Dictionary <string, CMakeSetting> userSettings, ModifyStartInfo modifyStartInfo = null)
 {
     return(StartConfigure(cmakeEnv, pathToSource, pathToBuild, new CMakeConfigureConfig()
     {
         UserSettings = userSettings
     }, modifyStartInfo));
 }