2016-08-19 4 views
1

実行可能ファイルであるソリューション内のすべてのプロジェクトのvcxprojファイルに沿ってvcxproj.userファイルを生成するようにデフォルトのVisual Studio Gradle Pluginタスクをカスタマイズしようとしていますライブラリをスキップする)。vcxproj.userを生成するためにGradle Visual Studioプラグインをカスタマイズする

考え方はGenerateProjectFileTask型のタスクを見つけ、実行可能なバイナリ(この部分は私がまだやっていない方法)を表すものだけをフィルタリングし、finalizedBy節を使ってそれらのタスクを実行させるというものでした。 .userファイルも生成されます。

私のプロジェクトはカスタムWorking Directoryのパスを持っているので、これが必要です。新しいソースファイルなどを追加するたびにプロジェクトを再生成しなければなりません。実行可能ファイル。これはかなり迷惑です。私はこれまでやろうとした何

subprojects { 
    // every proejct with plugin cpp also uses visual-studio plugin 
    plugins.withId('cpp') { 
     afterEvaluate { 
      tasks.withType(GenerateProjectFileTask) { task -> 
       def project = task.getVisualStudioProject() 
       if(project != null) { 
        println project.projectFile.location 
       } 
       else { 
        println "Project is null" 
       } 
       //println task.getOutputFile().getPath() <- this didnt work either 
       task.finalizedBy "someGeneratedTaskForEachProjectToCreateUserProperties" 
      } 
     } 
    } 
} 

だったが、それは常にProject is nullを印刷し、私は理由を理解していません。ファイルを生成する場所を知るためのパスが必要です。

また、最終化されたタスクが失敗したかどうかに関係なく常に実行されるため、finalizedBy節は嫌です。この問題の解決策はありますか?

私が達成したいのは、例えば、タスクを実行するときです:gradlew demoAppVisualStudioソリューションとすべての必要なプロジェクトだけでなく、生成されたタスクを実行可能ファイルとして作成して、追加のvcxproj.userファイルを作成する必要があります。内容は準備します(主に<LocalDebuggerWorkingDirectory>部分)

答えて

1

オクラホマ、答えがないので、私は問題が解決してから私はそれが最も満足していなかったが、それはかなり私ではない推測:

subprojects { subproj -> 
    plugins.withId('cpp') { 
    model { 
     components { 
     withType(NativeExecutableSpec) { c -> 
      subproj.tasks.whenTaskAdded { 
      if(it.name == "${c.name}VisualStudio") { 

       it.dependsOn task("${c.name}_${c.name}VisualStudioUserProperties", type:Task) { 

       def projectTask = tasks["${c.name}_${c.name}ExeVisualStudioProject"] 
       def path = projectTask.outputs.files.singleFile.parentFile.absolutePath 
       def outputPath = "${path}/${c.name}_${c.name}Exe.vcxproj.user" 

       inputs.file(file("data/vsDebuggerWorkingDirectory.xml")) 
       outputs.file(outputPath) 

       doLast { 
        new File(outputPath).write(("${inputs.files.singleFile.text}")) 
       } 
       mustRunAfter "${c.name}_${c.name}ExeVisualStudioProject" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
関連する問題