Conan и несколько конфигураций в проекте

Опубликовано SergeyOs - чт, 04/09/2020 - 19:19

По умолчанию conan умеет подготавливать сборку под одну конфигурацию Debug или Release. Если нужно Debug запускаем conan с параметром -s build_type=Debug, если Release то - -s build_type=Release. Но иногда нужно сделать проект поддержкой нескольких типов конфигурации одновременно, чтобы не перезапускать conan при активной разработке. Для этого есть генераторы -g cmake_multi и -g visual_studio_multi.

Использую сборщик CMake (универсально и современно), поэтому использую генератор cmake_multi. А ещё потому что conan c  генератором visual_studio_multi напутал параметры куда прописывать библиотеки и Visual Studio это не понял (возможно в следующих версиях будет всё нормально).

Итак, правки в CmakeLists.txt. Вместо прописанного обычного подключения conanbuildinfo.cmake:

include(conanbuildinfo.cmake)
conan_basic_setup()

нужно поставить условие, которое учитывает и мультигенератор и обычный.

if(EXISTS "conanbuildinfo_multi.cmake")
    include(conanbuildinfo_multi.cmake)
else()
    include(conanbuildinfo.cmake)
endif()
conan_basic_setup()

В каталоге проекта запустить conan для нужных конфигураций:

# conan install . -g cmake_multi -s build_type=Release
# conan install . -g cmake_multi -s build_type=Debug

Если это первый запуск conan'а, то он постарается определить систему и компилятор, об этом он напишет в консоль и создаст файл USER_FOLDER/.conan/profiles/default, который можно подредактировать, указав нужный компилятор и архитектуру. Если ошибок нет, то в папке проекта будут созданы такие файлы:

conanbuildinfo_debug.cmake
conanbuildinfo_multi.cmake
conanbuildinfo_release.cmake

Всё, можно собирать. Для Linux и gcc:

# mkdir build
# cd build
# cmake .. -DCMAKE_BUILD_TYPE=release|debug
# make

для Windows и Visual Studio (например для 2017ой) c 64 битной архитектурой:

# md build
# cd build
# cmake .. -G "Visual Studio 15 2017 Win64" .
# msbuild nameproject.sln /p:buildmode=release|debug (или открыть в студии)