2017-02-10 14 views
0

Начинающий, пытающийся понять всю работу по упрощению и связыванию. Почему я не могу создать свою C++-программу с использованием библиотеки CGAL, как обычно, и вам нужно использовать CMake для ее создания?Зачем мне создавать мою C++-программу с помощью CGAL с CMake?

Вопрос: можно ли использовать CMake внутри IDE? (Например, код :: Блоки?)

@Mike: Ну, это то, что я получил от чтения CGAL documentation. Я что-то неправильно понял?

+2

[Это] (https://cmake.org/about/) объясняет, что такое CMake. Это не отвечает, почему любой автор библиотеки решил использовать его, но он говорит вам, для чего это полезно. CMake совместим с некоторыми IDE. Код :: Блоки - это IDE, которую следует избегать по многим причинам. – IInspectable

+1

Что заставляет вас полагать, что вам нужно использовать CMake для создания программы, которая связывается с libCGAL? (Добавьте эту информацию в тело вашего вопроса) –

ответ

1

Вы были введены в заблуждение документацией CGAL, на которую вы ссылаетесь.

Разработчики CGAL выбрали CMake в качестве системы сборки для исходного пакета CGAL . Это популярная система сборки (выдающаяся для кросс-платформенной переносимости). Они также иллюстрируют построение своих примерных программ с помощью CMake: ; естественно, с примеры являются частью исходного пакета. Они также рекомендуют использовать CMake для создания собственных программ, которые зависят от CGAL.

Это достаточно справедливо для того, чтобы рекомендовать CMake и не удивляться тому, что они делают. Однако: если вы хотите написать программу, которая зависит от любой библиотеки - libfoo - вы исходите из предположения, что libfoo уже установлен для использования в вашем проекте. Что означает:

  • Файлы libfoo заголовка - foo.h, что угодно, - которые определяют программные интерфейсы библиотеки на вашей системе где-то так, что ваш компилятор может найти и прочитать их, когда вы пишете, например, #include <foo.h> в вашем коде.

  • В libfoo бинарниках - libfoo.a, libfoo.so, foo.lib, foo.dll, libfoo.dylib, в зависимости от обстоятельств может быть для вашей ОС - которые содержат реализацию в библиотеке также где-то в вашей системе, так , что ваш компоновщик может найти их и свяжите их с объектным кодом вашей программы , чтобы сделать полный исполняемый файл. (И, в случае динамических библиотек , где-нибудь там, где может найти загрузчик времени выполнения).

Итак, насколько здание программы, то она не имеет значения как libfoo заголовочных файлы и исполняемые файлы должны быть там, где они находятся на вашей системе , будь то положить туда CMake или феями. Дело только в том, что там . Затем вы можете построить свою программу с CMake, если хотите, или любой другим способом, который вам нравится.

Конечно, это может быть случай, когда вы решили написать программу, которая libfoo является не уже установлен в вашей системе. В этом случае вы установите .Затем перейдите к вашей программе в предположении, что она установлена ​​ .

Вам нужна библиотека CGAL и файлы заголовков, которые необходимо установить. Это должно было бы быть достигнуто (Linux/OS X), установив пакет разработки libcgal , предоставленный вашей операционной системой, используя его менеджер пакетов или (Windows), загрузив и запустив программу установки. Тогда вам не нужно знать или заботиться о том, как построен CGAL .

Если вы не можете получить пакет разработки по какой-либо причине или технически заинтересованы при установке библиотеки «из первых принципов», то вам необходимо построить и установить из исходного пакета. Поскольку система сборки для исходного пакета CMake, вам нужно научиться создавать и устанавливать его с помощью CMake и делать это.

После CGAL является установлен, чтобы использовать в своих проектах вам нужно только позаботиться рутинных требований с использованием библиотеки в: -

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

ли вы, что с CMake, Scons, Autotools, в Makefile, проект настройки в вашем IDE или просто работает ваш компилятор и компоновщик в командной строке с нужными опциями полностью ваш собственный выбор. (Хотя последний является наиболее эффективным поучительным, когда вы начинаете , но начинаете пытаться понять весь компилирующий и связанный бизнес).

Примеры программ CGAL могут быть построены с помощью кода :: Блоки как обычные простых проектов с библиотечными зависимостями, если вы предварительно установили CGAL .

+0

Обратите внимание, что для CGAL cmake также будет передавать дополнительные флаги ('-frounding-math' для gcc), которые могут потребоваться, чтобы компилятор генерировал правильный код, он также свяжет (и добавлять пути заголовка) с некоторыми зависимостями (boost, gmp, ...). Он будет компилировать примеры, используя ABI, совместимый с тем, который используется для библиотеки (вопросы на платформах, где двоичные файлы отладки не совместимы с исполняемыми файлами релиза). На самом деле все это можно сделать вручную, но весь список необходимых параметров еще не документирован CGAL и немного длиннее одного -I и -l флагов. –

0

Вы можете передать генератор кода в командной строке при вызове cmake. Он будет создавать файлы, которые вам нужно использовать и строить с помощью вашего ide.