仅使用Gradle构建静态库

时间:2015-12-17 15:28:52

标签: c gradle build linker native

我正在使用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 ---')
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

试图重现@nicomp的错误,并修复了它自己。唯一的区别是我已经更新了Gradle,所以它似乎是Gradle的实验性本机代码支持中的一个错误。

仅仅为了记录,原始错误表示模型处于不可修改状态的行。谷歌认为,当你在任务执行期间尝试修改模型时,应该会发生这种情况。这让我疯了,因为我不是我在做什么。

感谢所有看过的人!