Какие пыльные уголки захочет узнать новичок в CMake? - PullRequest
14 голосов
/ 22 декабря 2010

Я сделал много проектов и много разных систем сборки и инструментов CI. Совсем недавно я столкнулся с иногда сложной задачей добавления в среду автоинструментов для приложения C ++ разумного размера. Хотя мне нравится простота использования для конечного пользователя, я не очень люблю работать с m4 и всеми инструментами auto * со стороны разработчика.

В свободное время я работаю над достаточно большим сайд-проектом и решил, что я хотел бы взять CMake для тест-драйва. Поскольку я только начинаю, я, очевидно, планирую копаться в документации, FAQ, вики и т. Д. И учиться на практике. Кстати, я бы потратил деньги на книгу «Mastering CMake», но комментариев, которые я нашел на Amazon, было достаточно, чтобы я решил, что это, вероятно, не стоит денег. Все это, как говорится, во всем новом, часто есть "ошибки", которые новичок будет часто спотыкаться о том, что старые профессионалы давно научились избегать. Мне интересно, что они основаны на опыте людей с CMake, и я надеюсь немного укротить свои учебные проблемы, спросив здесь.

Я должен отметить, что я планирую собирать в первую очередь Linux и другие варианты UN * X. Windows на самом деле не касается моего POV. Это большое серверное приложение с веб-интерфейсом и интерфейсом командной строки для операторов, северным REST-интерфейсом для автоматизации / интеграции с инструментами OSS и южным SOAP-интерфейсом для CPE. Мне понадобится много сторонних библиотек и приложений, чтобы все это заработало, если я не хочу потратить следующие 10 лет, чтобы собрать все это вручную. :)

Ответы [ 2 ]

19 голосов
/ 23 декабря 2010

Прежде всего, я думаю, что CMake - отличный инструмент для сборки.Он, на мой взгляд, на сегодняшний день является лучшей поддержкой многоплатформенных сборок и обладает мощным механизмом поиска сторонних библиотек.В сочетании с CPack он даже предоставляет разумные варианты упаковки и установки.Некоторые подсказки и возможные проблемы:

  1. Всегда стремитесь к сборкам вне исходного кода: Очевидный: для проекта, разработанного для сборок в исходном коде, может быть сложно построить его.-of-источник.Так что, если вы можете спроектировать его с самого начала, стремитесь к сборкам вне исходного кода.

  2. Синтаксис: синтаксис может быть причудливым с множеством странных причуд, хотя это становится все труднеелучше, чем версии 2.6 и 2.8.

  3. Кэширование переменных.CMake отслеживает кэш переменных и настроек, и иногда это может быть проблемой при перестройке чего-либо.Попробуйте удалить CMakeCache.txt (или очистить каталог сборки вне источника) и пересобрать.Об этом также упоминает DarenW.

  4. Поиск и настройка сторонних библиотек: если у вас большой проект, зависящий от нескольких библиотек (ваших или сторонних), это, скорее всего, будетбудь самым хлопотным.

    • Я настоятельно рекомендую погрузиться в команду find_package.Он очень мощный, но полностью зависит от качества файлов FindXXX.cmake.Особенно при сборке на нескольких платформах (в основном, Windows и Mac), эти файлы могут потребовать некоторой настройки или вам может потребоваться написать свою собственную.

    • Проблемы со связыванием библиотек, такие как отладка «неопределенных ссылок» или несоответствия между debug | release или static | shared, могут быть сложными для отладки.Особенно в сторонних библиотеках эти проблемы могут быть вызваны неправильными сторонними файлами FindXXX.cmake ...

9 голосов
/ 22 декабря 2010

Мне потребовалось некоторое время, чтобы понять: если что-то пойдет не так со сборкой, потому что я изменил опцию компилятора, добавил / удалил файл .c, имел путаницу с версиями библиотеки поддержки и т. Д.удалить дерево сборки и запустить CMake с нуля.В противном случае, хотя CMake и make, кажется, делают свою работу, получающийся исполняемый файл вылетает.

Может быть, мы «делаем это неправильно», но это становится общей проблемой для многих инструментов, языков, сред и т. Д. Не каждый может быть экспертом во всем программном обеспечении, от которого зависити «не делать это правильно» - это единственный способ сделать многое даже среди профессионалов.CMake довольно умен во многих вещах, но не во всех.Обнуление дерева сборки остается широко используемой техникой в ​​нашем проекте.

...