Compile Boost с мультиконфигурацией с помощью CMake

У меня есть проект, который зависит от библиотеки Boost (и других). Я создал CMakeLists для автоматической загрузки и компиляции зависимостей с ExternalProject_Add,

Я хочу поддерживать мультиконфигурацию (Release и Debug). Итак, для других моих библиотек я определил CMAKE_BUILD_TYPE в начале моего CMakeLists. Я распространяю это по зависимости с -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} в ExternalProject_Add команда.

Хорошо работает на Windows и Linux.

Для Boost, однако, на основе конфигурации мне нужно скомпилировать с variant=debug или же variant=release, Я создал if(${CMAKE_BUILD_TYPE) MATCHES Debug) Заявление и установить вариант на основе этого требования.

Для Linux это работает хорошо, но в Windows это работает, только если я изменю CMAKE_BUILD_TYPE переменная во время cmake, Когда я пытаюсь изменить конфигурацию в VS, это не меняет CMAKE_BUILD_TYPE переменная.

Можно ли обнаружить конфигурацию, выбранную в VS в моих CMakeLists?

Спасибо.

#-----------------------------------------------------------------------------
# Boost
#-----------------------------------------------------------------------------

message(STATUS "Installing Boost library.")

set(BOOST_BOOTSTRAP_COMMAND)
if(WIN32)
set(BOOST_BOOTSTRAP_COMMAND bootstrap.bat)
set(BOOST_B2_COMMAND b2.exe)
elseif(UNIX )
set(BOOST_BOOTSTRAP_COMMAND ./bootstrap.sh)
set(BOOST_B2_COMMAND ./b2)
else()
# MacOSX
set(BOOST_BOOTSTRAP_COMMAND ./bootstrap.sh)
set(BOOST_B2_COMMAND ./b2)
endif()

set(BOOST_BUILD_TYPE variant=release)
if (${CMAKE_BUILD_TYPE} MATCHES Debug)
set(BOOST_BUILD_TYPE variant=debug)
endif(${CMAKE_BUILD_TYPE} MATCHES Debug)

set(BOOST_INSTALL_DIR ${PROJECT_BINARY_DIR}/deps/boost-install)
ExternalProject_Add(boost
SOURCE_DIR "${PROJECT_BINARY_DIR}/deps/boost"BUILD_IN_SOURCE 1
GIT_REPOSITORY "${git_protocol}://github.com/boostorg/boost"GIT_TAG "5ec478a570bdc71c5d4854e7165a8b3f4fa82ad9"CONFIGURE_COMMAND ${BOOST_BOOTSTRAP_COMMAND}
BUILD_COMMAND ${BOOST_B2_COMMAND} headers COMMAND ${BOOST_B2_COMMAND} install
link=static
${BOOST_BUILD_TYPE}
--prefix=${BOOST_INSTALL_DIR}
--with-filesystem
--with-program_options
--with-system
--with-thread
-j8
INSTALL_COMMAND "")

1

Решение

Когда запускается CMake, невозможно узнать, какой тип сборки пользователь выберет во время сборки при использовании генератора с множеством конфигураций (Visual Studio или Xcode). Пользователь делает этот выбор после того, как CMake завершил этап конфигурирования и генерации (т.е. после cmake команда завершена). Пользователь также может создавать более одного типа сборки, поэтому с этими генераторами нет концепции единого типа сборки.

Одним из вариантов может быть определение пользовательской команды, которая выполняет соответствующую сборку boost как задачу времени сборки, а не с использованием ExternalProject. Это, вероятно, самое близкое к тому, чего вы хотите достичь. Вы все еще можете загрузить исходный код во время настройки во время запуска CMake, методика, которая упоминается Вот с googletest в качестве примера. Этот ответ содержит ссылку на статью, которая более детально описана, а также полностью общую реализацию, доступную на github, которая потенциально подойдет для вашей ситуации.

2

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

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

По вопросам рекламы [email protected]