2015-05-07 4 views
6

На моей локальной файловой системе я следующий C проект структуры каталогов:Gradle C Plugin в примере

derpus/ 
    src/ 
     derpus/ 
      c/ 
       derpus.c 
      headers/ 
    build.gradle 

Где derpus.c является:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    puts("Derp!"); 
    return EXIT_SUCCESS; 
} 

Я хотел бы использовать Gradle Native (C) Plugin для управления полный спектр построения derpus. В частности, я хотел бы, чтобы Gradle:

  1. Сформировать обертку Gradle, так что я могу использовать gradlew для всех моих сборки заклятий; и
  2. Сборка & derpus по derpus.exe через gradlew; и
  3. Сформировать Eclipse, данные проекта, когда я бегу gradlew eclipse так что я могу импортировать проект в Eclipse, (я уже предустановлен плагин Eclipse CDT)

Вот мой build.gradle:

apply plugin: 'c' 
apply plugin: 'eclipse' 

sources { 
    c { 
     source { 
      srcDir "src/derpus/c" 
      include "**/*.c" 
     } 
     exportedHeaders { 
      srcDir "src/derpus/headers" 
     } 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

Очевидно, что я должен был запустить gradle wrapper, чтобы позаботиться о первом элементе. Но что касается компиляции и построения, нет, где в документах плагина C я действительно вижу команду или строит вызов , который фактически запускает компиляцию и создает!

Что касается третьего элемента, используя плагин Eclipse и вызывая его через gradlew eclipse, мне интересно, есть ли что-то еще, что мне нужно сделать, чтобы результирующие конфигурации проекта/настроек были совместимы с тем, что ожидает плагин Eclipse CDT в для работы с программами C. Хотя я намерен позволить Gradle обрабатывать все мои сборки, я все равно хочу сделать все свое развитие в Eclipse, и поэтому все, что приходит CDT (подсветка синтаксиса, компиляция и т. Д.), Важна для меня.

ответ

6

ОК Я понял все 3 выхода, и думал, что отправлю этот ответ для будущих читателей.

Пожалуйста, обратите внимание: Это решение действительно на жизнеспособном для современных программистов C, которые:

  • Хотят сделать все развития в Затмении, пользуясь современными IDE объектов, как подсветка синтаксиса, ошибки, декларация Гото, иерархия открытых вызовов, отладчик Eclipse и т. д .; но ...
  • Хочет современный, кик-а ** построить систему как Gradle сделать все здание командной строки/оболочку

Кроме того, потому что я нахожусь на Windows, я выбрал используйте MinGW для моего GCC-обеспечения, поэтому, если вы либо на * nix или Mac, либо если вы предпочитаете Cygwin, вам придется дополнительно настроить это решение.

Кроме того, я только проверял, что это работает с Eclipse Luna, используя последний плагин Eclipse CDT (8.6) и используя Gradle 2.3.

Решение

Сначала я должен был исправить мое использование плагина C, меняю build.gradle выглядеть следующим образом:

apply plugin: 'c' 
apply plugin: 'eclipse' 

model { 
    components { 
     derpus(NativeExecutableSpec) { 
      sources { 
       c(CSourceSet) { 
        source { 
         srcDir "src/derpus/c" 
         include "**/*.c" 
        } 
        exportedHeaders { 
         srcDir "src/derpus/headers" 
        } 
       } 
      } 
     } 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

Это позволило мне работать gradle wrapper без каких-либо ошибок.

Далее я начал очень своеобразно напоминать, что документация о родственных бинарниках Gradle никогда не упоминает вызов сборки для компиляции/создания собственных исполняемых файлов. Я предположил, что это может привести к тому, что подход «соглашение над конфигурацией» Грэдля, и я побежал gradlew build - voila! Большой успех. Сейчас под derpus/build/binaries/derpusExecutable У меня есть derpus.exe! Все идет нормально.

Настоящая головная боль возникает, когда вы хотите импортировать этот проект под управлением Gradle в Eclipse, но при этом Eclipse CDT предоставляет все обычные функции современной C IDE.

Я начал с работы gradlew eclipse, который добавил следующие файлы в корневом каталоге derpus/ проекта:

  • .project
  • .settings/language.settings

я открыл Eclipse, и импортировать его как проект, однако У меня были всевозможные ошибки, и когда я завис над #include <stdio.h> в моем derpus.c файле и нажал F3, Eclipse di d ничего. Очевидно, что-то все еще не настроено правильно. И поэтому мне пришлось взломать.

Оказывается, вам нужно:

  • Конечно, сначала убедитесь, что установлен плагин CDT и работает правильно (DOH!)
  • Создать «фиктивного» проект C в Eclipse, который будет позволяет копировать н вставить Eclipse CDT сгенерированные настройки/конфиги для вашего проекта
  • фактической Изменить фактическую .project файл включает те же <buildSpec /> и <natures /> элементы, которые были созданы в фиктивный проект-хfile
  • Скопируйте файл .cproject файла фиктивного файла в корень вашего фактического проекта и откройте его в текстовом редакторе. Вы хотите переименовать ВСЕ экземпляры имени фиктивного проекта с именем вашего фактического проекта; в моем случае было 3 случая. В моем случае мой фиктивный проект был буквально назван dummy, и мой фактический проект называется derpus. Поэтому мне пришлось изменить 3 экземпляра dummy на derpus в этом файле.
  • Restart Затмение

Ваш фактический проект теперь будет вести себя точно так же, как C проект, созданный с помощью плагина CDT.Не забудьте удалить вас «фиктивный» проект ;-)

1

Вы можете добавить C++ природу проекта с помощью:

  1. создать Gradle проект
  2. выбрать проект
  3. использовать Eclipse-> новый-> другие
  4. выберите C++ -> преобразовать в C++ проекта
  5. очистить проект
+0

Работала для меня, сначала импортируя проект Gradle, а затем добавляя природу C/C++, как указано выше (Eclipse Oxygen/Gradle 4.0). Никаких возиться с файлами конфигурации! – lazlev

0

Просто попытался это (с Gradle 4.3), и я хотел бы указать на то, что вы можете упростить раздел для model:

model { 
    components { 
     derpus(NativeExecutableSpec) 
    } 
} 

, поскольку каталог источника по умолчанию для "src/derpus/c" в любом случае.