Я разбиваю свой мозг на cmake. Я не понимал должным образом всю свою силу, но везде, где я читаю, это стоит того, чтобы научиться этому... вот я.
Я хотел бы настроить среду для здания, где можно использовать некоторые из хороших библиотек, которые я обычно использую (Qt, OpenGL, OpenCV и т.д.), И я могу легко писать как приложения, так и модули (назовем их модулями, пока) для использования в приложениях.
Структура папок, которую я имею в виду, это что-то вроде:
/apps/app_with_foo_and_qt_gui
/apps/app_with_foo
/apps/app_with_foo_and_foo1
/modules/foo
/modules/foo1
от того, что я получаю, мне нужно в приложениях использовать команду find_package
для включения в foo или foo1, но я считаю, что кажется, что эта команда ищет файл поиска или конфига, и я не понял разницу между ними.
Тогда, моя идея состоит в том, чтобы иметь в каждом из моего модуля built
папку, куда поместить скомпилированную часть модуля (для того, чтобы не компилировать его каждый раз, когда я скомпилирую приложение, которое его использует), и тестовую папку, куда следует поставить тест. Но мне не очень понятно, как скомпилировать тесты.
Некоторые разъяснения?
Что касается Find *.cmake и Config.cmake, эти два файла выполняют ту же задачу поиска и предоставления информации о пакете. Однако существует способ взаимодействия. С помощью файлов Find.cmake CMake будет использовать их для поиска различных деталей. Например, файл CMake FindQt4.cmake будет искать вашу систему для qmake и использовать для этого различные переменные для использования Qt4 с CMake. С другой стороны, файлы * Config.cmake содержат предопределенные данные о том, где существуют различные части пакета в системе. Например, если файл Qt4Config.cmake существует, он не будет запрашивать qmake для путей, но вместо этого содержит предварительно вычисленные пути для Qt4. Более подробную информацию см. В документации CMake о find_package.
Таким образом, моя рекомендация для вашей структуры проекта также имеет foo и foo1, устанавливаемые как системные библиотеки, и используйте файл Config.cmake, чтобы найти различные сведения о них. Обратите внимание, что вам не нужно устанавливать библиотеки foo в систему, вместо этого вы можете просто установить их в локальный каталог (либо встроенную папку, либо общее местоположение, такое как /modules/install и т.д.).
Затем каждое приложение может просто запрашивать соответствующие фрагменты, используя CMake find_package.
Для создания файлов * Config.cmake у CMake есть документация, расположенная здесь.