2015-12-17 5 views
1

Я создаю проект C с использованием Gradle, который включает sqlite3 как родную зависимость. Я хотел бы создать только статическую библиотеку, поскольку мне не нужна общая библиотека (.so). В документации Gradle указано, что оба они построены по умолчанию, но не для того, чтобы создавать только один или другой. Я попытался включить buildable = false для соответствующих двоичных типов, но это приводит к ошибке. Я прикрепил свой build.gradle ниже. Я знаю, что эта проблема не нарушает ничего, но это действительно подтачивает меня, потому что это будет большой тратой времени на сборку, так как проект будет двигаться дальше.Создайте статическую библиотеку только с помощью 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

Когда вы пишете «но это приводит к ошибке», какова ошибка, где ошибка, и вы ошиблись в Google? – nicomp

ответ

1

Просто попытался воспроизвести ошибку для @nicomp, и она исправила себя. Единственное различие заключается в том, что с тех пор я обновил Gradle, поэтому он, похоже, был ошибкой в ​​поддержке экспериментального исходного кода Gradle.

Только для записи оригинальная ошибка сказала что-то вдоль линий, что модель находилась в неизменяемом состоянии. Согласно Google, это должно произойти, когда вы пытаетесь модифицировать модель во время выполнения задачи. Это меня раздражало, потому что я не то, что делал.

Спасибо всем, кто посмотрел!

Смежные вопросы