Как мне нужно учитывать тот факт, что для Visual Studio 2010, Visual Studio 2017, 32/64 бит и т. Д. Мне нужно использовать разные версии сторонних включений и библиотек?
На самом деле, вам не нужно делать ничего особенного, чтобы "обработать этот факт"%)
Например, вы можете загрузить Официальные предварительно созданные двоичные файлы Boost (например, пакет all-in-one) и установить его, скажем, по умолчанию, путь C:\local\boost
. В зависимости от выбранного набора инструментов / VS-версия find_package(boost ...)
будет искать соответствующие библиотеки без дополнительных усилий с вашей стороны. Вы просто используете найденные библиотеки без if
с.
То же самое для Linux. Скажем, вам нужна Ubuntu 18.04 amd64 и CentOS 7 x86. Просто установите пакет надстройки, если он поставляется с дистрибутивом, или создайте его самостоятельно, если это не так. Тогда "используй" это%)
Нужно ли иметь что-то вроде операторов if в файлах CMakeLists.txt, где я указываю разные пути include / library и разные имена библиотечных файлов для разных условий?
Звучит как непонимание того, как работает CMake%). В CMakeLists.txt
вашего проекта вы описываете только одну (хорошо, несколько, для генераторов с множеством конфигураций) сборку. Чтобы это произошло, у вас CMakeLists.txt
есть find_package
для необходимых третьих сторон, и они найдут ровно одну версию любой зависимости (хорошо, я сейчас говорю о обычных проектах). Затем, используя разные ОС / среды, вы можете создавать необходимые артефакты.
Итак, вам просто не нужны «разные» пути включения / библиотеки. С точки зрения вашего проекта, вы просто используете find_package
(для повышения и т. Д.), А затем используете его результаты (импортированные цели любого типа). Потому что обычно сборка происходит внутри подготовленной среды, такой как докер или бродячий образ со всеми необходимыми предварительными условиями, и вы просто не можете произвести все необходимые сборки, используя единственную ОС / среду, поэтому вам не нужно устанавливать разные версии ...
... если быть точным, вы можете ... теоретически ... но настроить кросс-компиляцию намного сложнее, чем запекать образ докера / бродяги целевой ОС).
Так что для вашего случая вам нужно собрать одни и те же источники несколько раз:
- для Windows и других VisualStudio (2 версии * 2 архитектуры);
- для всех дистрибутивов и архитектур Linux (N-distros * 2 архитектуры).