我有一个相当简单的build.gradle文件,用于构建zlib目录。不幸的是,生成的* .o文件被分散到各个目录中。例如
build/objs/zlib/shared/zlibC/xvtb7xzcn488esep2yp1v714/uncompr.o
build/objs/zlib/shared/zlibC/2osjpf8p443huii37rw8g7o7d/zutil.o
[...]
build/objs/zlib/shared/zlibC/bkho3m4h5simvpsegapx51g54/trees.o
build/objs/zlib/shared/zlibC/2zicemubjlmw82yi1ysriaup4/inflate.o
如何将所有生成的* .o文件(减去unique-id目录)的输出目录设置为build / zlib?
apply plugin: 'c'
FileCollection zlibfiles = files(
'adler32',
[...]
'trees',
'zutil')
model {
components {
zlib(NativeLibrarySpec) {
sources {
c {
source {
srcDir "."
include '*.c'
}
exportedHeaders {
srcDir '.'
}
}
}
}
}
binaries {
withType(SharedLibraryBinarySpec) {
if (targetPlatform.operatingSystem.linux) {
cppCompiler.args '-c', '-g', '-fPIC'
// relative paths are ignored by Gradle
// only fully qualified paths are recognized
// cppCompiler.args '-I', '../..'
cppCompiler.args '-I', "${rootDir}/zlib"
linker.args '-pthread'
}
}
}
}
我有一个查找副本任务,但是这里的目标是正确使用Gradle。我宁愿使用Gradle的gcc / g++'-o'选项。
task zlibcopy (type: Copy) {
configurations {
conf
}
dependencies {
conf fileTree(dir: "${buildDir}/objs/zlib/shared/zlibC/")
}
from configurations.conf.getAsFileTree()
into "${rootDir}/build/client/ps/common/zlib"
}
Gradle :4.7
CentOS的:7.4
的Java:1.8.0_144
最佳答案
显然,Gradle不允许将本机代码输出到指定的输出目录。您可以在唯一标识的输出目录中找到* .o,在“共享”目录中找到* .so,在“静态”目录中找到* .a。真是