Occa: поддержка cmake

Созданный на 8 окт. 2018  ·  11Комментарии  ·  Источник: libocca/occa

Привет OCCA,

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

Лучший,

Амик

question help wanted

Все 11 Комментарий

Мои 2 цента...

Многие программные пакеты, которые я использую (например, VTK), настроены и собраны с использованием cmake, но лично мне это не нравится. Не столько для языка cmake и кода, который нужно написать, сколько для очень неясных «компонентов» make-файла, которые он генерирует в глубокую и запутанную структуру каталогов. Поэтому выяснить, почему cmake дает сбой, или почему что-то не компилируется, или как настроить сборку, может оказаться нетривиальной задачей (по крайней мере, для меня).

Создание make-файла для текущей среды сборки в соответствии со спецификациями конфигурации, как правило, хорошо, но каким бы ни был генератор, IMHO должен генерировать только один плоский, простой make-файл, который можно читать и потенциально настраивать (например, почтенный 'configure ' делает). Это точно не cmake!

Привет, Пол,

Я не в восторге от него, но после установки в проекте он довольно надежен. Основным преимуществом этого является интеграция и тестирование. Например, предположим, я бы начал интегрировать OCCA в довольно большой код, я бы поместил исходный код в каталог с именем 3rdparty, и, если бы он использовал cmake, я бы просто сообщил cmake о новом каталоге add_directory(...) . Затем он автоматически собирал OCCA, используя компиляторы и другие спецификации из «верхнего» CMakeLists.txt. Если бы я добавил зависимости к OCCA в тестовом драйвере (сначала) и к большему количеству исходных/других каталогов позже, это было бы очень просто.

Мой опыт работы с cmake заключается в том, что если у вас есть проблемы на уровне «сделать», обычно проблема заключается в том, что вы слишком сильно специализируетесь (например, принудительно устанавливаете явные флаги компилятора...) cmake на верхнем уровне. Для большинства проблем make VERBOSE=1 покажет полную строку компиляции (которую вы можете вырезать и вставить), чтобы выяснить, что не так (и затем изменить cmake (не make)).

Мы также постоянно используем ctest...

Во всяком случае, просто хотел прощупать почву в этом отношении.

Лучший,

Амик

Я фанат этого ( может быть, даже слишком ), на самом деле, поддержка CMake — это первое, что я искал. Я управляю всеми зависимостями (например, в GooFit ) как подмодули git в extern, а затем CMake проверит их для пользователя, если он не знает о подмодулях, затем CMake объединит все зависимости. Самое замечательное в CMake то, что он поддерживает любой способ работы — если я хочу использовать IDE, например, как Xcode, это легко, только если используется CMake. Я могу легко добавить CCache, отладочные сборки, clang-tidy и т. д.

@henryiii Если у него есть интеграция с IDE, это звучит как хорошая идея!

Я не решаюсь удалить сборку Makefile, поскольку make можно найти из коробки в большинстве мест, но мы можем добавить вместе с ней поддержку CMake. Мы можем обновить конфигурацию CI для запуска тестов со сборками make и cmake .

Если у вас есть время, можете ли вы сделать для него PR с основными файлами CMake? Если это поможет, я могу добавить все переменные среды/побочные эффекты, которые ожидаются во время сборки.

Сейчас новым/потенциальным пользователям OCCA (программистам высокопроизводительных вычислений) достаточно загрузить исходный код OCCA и ввести make . Очень простой. Для меня ценностное предложение OCCA основано на 100% на выдающихся возможностях, которые он предоставляет в области параллельного программирования, а не в системе сборки. Тем не менее, возможно, переход OCCA на сборки на основе cmake принесет небольшую пользу, я не знаю.

Возможно, кто-то, разбирающийся в кодировании cmake, мог бы написать необходимые файлы cmake и передать их в OCCA через запрос на включение? Это могло бы помочь развеять опасения некоторых людей и помочь им перейти к реальному использованию OCCA.

Возвращаясь к теме cmake, для некоторых из нас в любом случае «пробег может варьироваться». Серьезно, я уверен, что мой энтузиазм по поводу cmake значительно возрос бы, если бы я действительно научился писать/отлаживать/модифицировать код языка cmake на уровне, превышающем мой нынешний уровень до новичка. В то же время, когда я сталкиваюсь с неприятными проблемами с чьими-то плохо написанными/устаревшими файлами CMakeLists.txt и/или с ошибками или плохо написанными файлами Find*.cmake , работающими должным образом для какого-либо пакета, который я только что скачал с github для оценки, у меня могут быть неприятные ощущения от отрицательной оценки!

@pdhahn Просто чтобы прояснить, я не думаю, что когда-нибудь избавлюсь от сборки «только введите make для компиляции». Определенно нуждается в очистке (# 149), но сделать установку и использование простыми для пользователей является приоритетом номер один.

Добавление CMake помогло бы использовать OCCA в проектах, которые уже используют CMake, и похоже, что эта интеграция с IDE облегчит жизнь разработчикам.

@dmed256 dmed256 Вы правы, IDE звучит так, как будто это может быть нетривиальной добавленной стоимостью для OCCA!

Но вам нужно как минимум разместить множество популярных IDE, таких как eclipse и Qt Creator.

CMake поддерживает все виды инструментов (и все виды инструментов его поддерживают), а не только IDE. Все основные IDE либо поддерживаются CMake, либо CMake поддерживает их. CLion, Qt Creator, Eclipe, Xcode и другие. Он также поддерживает связывание того, что вы используете, включение того, что вы используете, clang-tidy, ccache, различные тестовые интеграции, упаковку и многое другое.

Если сборка CMake работала хорошо, в конечном итоге вы можете сделать, чтобы Makefile просто вызывал CMake для вас, я делал это раньше в GooFit. Вы можете даже загрузить make-файл CMake, а затем вызвать его (я не пробовал этого раньше, но я думаю, что разговаривал с кем-то, кто пробовал); это позволило бы ему работать где угодно и с последней версией (вам просто нужно было бы иметь простой переключатель, который загружал двоичный файл linux или macos в зависимости от того, где вы работали).

Я надеюсь оценить occa в ближайшие пару недель, а затем , возможно , смогу помочь с поддержкой CMake.

@henryiii Это имеет смысл, у нас так много времени :) Тем не менее, ценю этот совет CMake!

В заключение спасибо за всю работу от @hknibbe2 , @SFrijters , @amikstcyr и @JamesEggleton 🎉

Была ли эта страница полезной?
0 / 5 - 0 рейтинги