Как добавить библиотеки в проект системно-независимым способом?

Я разрабатываю приложение, используя Qt и OpenGL, и нашел необходимым загрузить библиотеку GLM. Это библиотека только для заголовков, поэтому мне не нужно ни на что ссылаться. Я хочу, чтобы это приложение собиралось в любой системе, в которой установлены правильные библиотеки. Моя проблема в том, что я не знаю, куда поместить GLM, чтобы система могла найти его, не добавляя определенный путь к файлу .pro проекта. Файл .pro является частью моего git-репозитория, так как исходный код распространяется на другие системы, такие как Linux и т. Д. Поэтому я не хочу, чтобы этот файл указывал точное местоположение GLM, потому что другие системы могли бы иметь его в других местах. ,

В настоящее время я занимаюсь разработкой для Windows, компилирую в Qt Creator с использованием Visual C ++ 2010. Я читаю из MSDN тот #include <file> выполняет поиск с использованием переменной среды INCLUDE, поэтому я попытался добавить путь к glm.hpp в INCLUDE, но среда сборки QtCreator для этого проекта перезаписывает INCLUDE. Поэтому я добавил путь к GLM к новому INCLUDE из вкладки Projects QtCreator, но мой код все еще не может найти glm.hpp.

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

2

Решение

То, что вам нужно, это система сборки с возможностью поиска в системе тех библиотек, которые вы запрашиваете, и возможности сделать это на любой платформе. Одна такая система сборки CMake, и это наиболее широко используемая система сборки. По сути, cmake позволяет вам написать скрипт сборки, в котором вы можете указать все, что вы обычно указываете при создании проекта в Qt Creator или Visual Studio, например, список исходных файлов, сгруппированных по целям для компиляции (библиотеки, исполняемые файлы, и т. д.), относительные пути к заголовкам и библиотекам, которые нужно включить для связывания и для путей включения, среди многих других вещей. Для библиотек, которые установлены в системе, есть функция, которая называется find_package() (часть команд сценария cmake), которая выяснит, установлена ​​ли библиотека и где найти ее lib-файлы и заголовки (сохраняя эти пути в виде строк кэша, которые вы можете указать для целей и т. д.). Обычно это прекрасно работает, если библиотеки не установлены в странных местах. Это работает так: когда вы запускаете cmake, он генерирует скрипт / конфигурацию сборки практически для любой платформы, которую вы укажете, и затем вы используете ее для компиляции вашего кода. Он может генерировать make-файлы (Unix-подобные или windows), файлы проектов CodeBlocks, файлы проектов Visual Studio и т. Д. И многие IDE также имеют встроенную поддержку проектов cmake.

Хотел бы я порекомендовать альтернативу, просто чтобы она звучала менее предвзято для cmake, но я не слышал ни одного, который действительно сравнивал бы ее с этим, особенно с целью обнаружения внешних зависимостей и работы с различными платформами. Я бы догадался Boost.Build тоже прилично.

2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector