我正在使用Gradle构建一个C项目,它包含sqlite3作为本机依赖项。我想只构建静态库,因为我不需要共享库(.so)。在Gradle文档中,它声明两者都是默认构建的,而不是如何仅构建一个或另一个。我尝试将buildable = false
包含在适当的二进制类型中,但这会导致错误。我已经在下面附加了我的build.gradle。我知道这个问题并没有破坏任何东西,但这真的让我烦恼,因为随着项目的进一步发展,这将浪费大量的建设时间。
非常感谢任何帮助或建议!
apply plugin: 'c'
model {
components {
sqlite3(NativeLibrarySpec) {
sources.c {
source {
srcDir "lib/sqlite3"
include "*.c"
}
exportedHeaders {
srcDir "lib/sqlite3"
include "*.h"
}
}
// Attempted to make the shared Library unbuildable, but this results in a model error!
// binaries.withType(SharedLibraryBinarySpec) {
// buildable = false
// }
}
main(NativeExecutableSpec){
sources.c {
source{
srcDir "src"
include "**/*.c"
}
exportedHeaders {
srcDir "inc"
}
}
binaries.all {
lib library: 'sqlite3', linkage: 'static'
linker.args '-ldl', '-pthread', '-lpam', '-lgnutls', '-lgcrypt', '-levent'
}
}
}
toolChains {
clang(Clang)
}
tasks {
run(Task) {
dependsOn 'build'
doLast() {
mkdir('build/run')
println(' --- BEGIN OUTPUT ---\n')
exec {
executable '../binaries/mainExecutable/main'
workingDir './build/run'
}
println('\n --- END OUTPUT ---')
}
}
}
}
答案 0 :(得分:1)
试图重现@nicomp的错误,并修复了它自己。唯一的区别是我已经更新了Gradle,所以它似乎是Gradle的实验性本机代码支持中的一个错误。
仅仅为了记录,原始错误表示模型处于不可修改状态的行。谷歌认为,当你在任务执行期间尝试修改模型时,应该会发生这种情况。这让我疯了,因为我不是我在做什么。
感谢所有看过的人!