Каков наилучший способ интеграции проекта CMake в Buck?

Я использую Buck для моего собственного C ++ проекта, но я зависим от сторонней библиотеки, созданной с использованием CMake. Файл CMake является сложным, поэтому я не думаю, что целесообразно воссоздавать их файл CMake в Buck. Вместо этого я хотел бы позвонить CMake от Buck.

Как лучше всего позвонить в CMake из Buck?

Как я должен структурировать свой проект, чтобы минимизировать головные боли?

2

Решение

Мое предложение заключается в использовании genrule и prebuilt_cxx_library.

Это мой учебный проект Бак с использованием Google Test:
https://github.com/ar90n/lab/tree/master/sandbox/buck-study/gtest

Этот проект содержит два файла Buck. Тот самый (./gtest/BUCK) предназначен для получения и построения Google Test. Другой (./BUCK) предназначен для сборки и запуска тестовых программ.

Если вы хотите собрать и запустить этот проект, выполните следующие команды:

$ buck fetch //gtest:googletest-src
$ buck build :sample1
$ buck run :sample1
1

Другие решения

Вызов CMake нарушит воспроизводимость, поэтому это не лучший подход. Вместо этого попробуйте следующее:

  1. Форк проект, который строит с CMake.
  2. Вызовите CMake для генерации любых заголовочных файлов.
  3. Сохраните заголовочные файлы где-нибудь в проекте (например, /cmake-generated).
  4. Создайте только библиотеку заголовков файлов заголовков, созданных CMake.
  5. Соберите остальную часть проекта с помощью Buck, в зависимости от библиотеки CMake.
  6. Передайте все, чтобы Git.
  7. Повторите шаг 2 для каждой цели, которая вам требуется.

Это не так хорошо, как настоящий порт для Buck, но вы получаете большую часть преимуществ за одноразовый ручной шаг.

0