Gradle 构建 C/C++ 代码时的编译器输出
Gradle compiler output when building C/C++ code
我正在 C/C++ 代码 gradle 在 Linux (gcc) 和 Windows (VS10 ) 就像 gradle 的 Building native software documentation 中描述的那样。
构建过程很好,我可以启动我的应用程序。如果在构建过程中发生错误,您可以在控制台上看到编译器输出,如 warnings 和 errors。此输出另外写入文件:build/tmp/"TaskName"/output.txt
。
问题 是,如果构建运行没有错误,此输出不会显示在控制台上,但文件已写入。
我正在寻找一种方法来在控制台上显示编译器输出,例如警告或错误,即使构建成功也是如此。
可以使用更高的日志级别启动 gradle 构建:gradle build --info
,但是我 不想要太多额外的输出.
我已经在 build.gradle
文件中尝试过类似下面的代码来为所有编译任务设置日志级别,但这没有什么区别,因为我将只使用 gradle 构建: gradle build
.
tasks.whenTaskAdded { task ->
if (task instanceof CCompile || task instanceof CppCompile) {
logging.setLevel(LogLevel.INFO)
}
}
我的问题:
有什么方法可以在没有开销的情况下在控制台上获取编译器 errors/warnings 吗?是否可以为某些任务设置 LogLevel
?如果是这样,上面的代码有什么问题?
我们将不胜感激。
只需在 运行 您的 gradle 命令后添加一个 cat outputfile.txt
我现在解决了它,因为 Johan Engblom 已经存在的 为我指明了正确的方向。我没有使用依赖于平台的 cat outputfile.txt
(Linux),而是使用 gradle 的功能,以便它可以在 Windows 或 Linux 上运行。确保该解决方案在编译时不会输出编译器输出,但会在作业完成后输出。
要在编译和 link 任务之后添加任务,我添加以下内容(如果构建失败或成功,将执行此任务)。
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'
}
}
}
我正在 C/C++ 代码 gradle 在 Linux (gcc) 和 Windows (VS10 ) 就像 gradle 的 Building native software documentation 中描述的那样。
构建过程很好,我可以启动我的应用程序。如果在构建过程中发生错误,您可以在控制台上看到编译器输出,如 warnings 和 errors。此输出另外写入文件:build/tmp/"TaskName"/output.txt
。
问题 是,如果构建运行没有错误,此输出不会显示在控制台上,但文件已写入。
我正在寻找一种方法来在控制台上显示编译器输出,例如警告或错误,即使构建成功也是如此。
可以使用更高的日志级别启动 gradle 构建:gradle build --info
,但是我 不想要太多额外的输出.
我已经在 build.gradle
文件中尝试过类似下面的代码来为所有编译任务设置日志级别,但这没有什么区别,因为我将只使用 gradle 构建: gradle build
.
tasks.whenTaskAdded { task ->
if (task instanceof CCompile || task instanceof CppCompile) {
logging.setLevel(LogLevel.INFO)
}
}
我的问题:
有什么方法可以在没有开销的情况下在控制台上获取编译器 errors/warnings 吗?是否可以为某些任务设置 LogLevel
?如果是这样,上面的代码有什么问题?
我们将不胜感激。
只需在 运行 您的 gradle 命令后添加一个 cat outputfile.txt
我现在解决了它,因为 Johan Engblom 已经存在的 cat outputfile.txt
(Linux),而是使用 gradle 的功能,以便它可以在 Windows 或 Linux 上运行。确保该解决方案在编译时不会输出编译器输出,但会在作业完成后输出。
要在编译和 link 任务之后添加任务,我添加以下内容(如果构建失败或成功,将执行此任务)。
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'
}
}
}