构建C / C ++代码时的Gradle编译器输出

时间:2017-05-23 06:06:57

标签: c++ c gradle build.gradle gradle-plugin

我正在使用gradle在Linux(gcc)和Windows(VS10)下构建 C / C ++ 代码,就像它在gradle的Building native software documentation中所描述的那样。

构建过程很好,我可以启动我的应用程序。如果在构建过程中发生错误,您可以在控制台上看到编译器输出,如警告和错误。此输出另外写入文件:build/tmp/"TaskName"/output.txt问题是如果构建运行没有错误,则此输出不会显示在控制台上,但是文件已写入。

即使构建成功,我也在寻找一种在控制台上显示编译器输出的方法,如警告或错误。

可以使用更高的日志级别启动gradle构建:gradle build --info,但是我有很多附加输出想要。

我已经在build.gradle文件中尝试了类似下面代码的内容,仅为所有编译任务设置日志级别,但它没有任何区别,因为我只需使用:gradle build启动gradle构建

tasks.whenTaskAdded { task ->
   if (task instanceof CCompile || task instanceof CppCompile) {
      logging.setLevel(LogLevel.INFO)
   }
}

我的问题:

有没有办法在没有开销的情况下在控制台上获取编译器错误/警告?是否有可能为某些任务设置LogLevel?如果是这样,上面的代码出了什么问题?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我现在解决了,因为Johan Engblom已经存在的answer指向了正确的方向。我没有使用平台相关的cat outputfile.txt(Linux),而是使用gradle的功能,以便它可以在Windows或Linux上运行。确保该解决方案在编译时不输出编译器输出,但在作业完成后输出它。

要在编译和链接任务之后添加任务,我添加以下内容(如果构建失败或成功,将执行此任务)。

tasks.withType(InstallExecutable) {
   finalizedBy showCompilerOutput
}

如果你只是想在构建成功时执行showCompilerOutput,你可以使用它:

build.finalizedBy showCompilerOutput

任务showCompilerOutput用于显示我在问题中提到的文件的输出。因此,它构建了一个文件树,指向我提到的文件:output.txt

task showCompilerOutput {
   dependsOn showCompilerOptions
   doLast {
      println '\n-----------------------------------------------------\n'
      println 'Compiler output:'
      FileTree tree = fileTree('build').include('**/output.txt')
      // Iterate over the contents of a tree
      tree.each {File file ->
          println 'Content of file ' + file + ':\n'
          println file.text
          println '------\n'
      }
   }
}

此任务还依赖于另一个名为showCompilerOptions的任务,它对具有编译器选项的文件执行相同的操作:options.txt

task showCompilerOptions {
   doLast {
      println '\n-----------------------------------------------------\n'
      println 'Compiler options:'
      FileTree tree = fileTree('build').include('**/options.txt')
      // Iterate over the contents of a tree
      tree.each {File file ->
          println 'Content of file ' + file + ':\n'
          println file.text
          println '------\n'
      }
   }
}

答案 1 :(得分:0)

在运行gradle命令后添加cat outputfile.txt