Построить 32 и 64-битные библиотеки для boost в sametime?

будет ли опция "--address-model=32,64 " создавать как 32, так и 64 библиотеки или вам нужно делать две отдельные сборки?

3 ответов


делаем:

b2 address-model=32,64

или..

b2 address-model=32,64,32_64

работа и производит, в зависимости от toolset и поддержки платформы, и 32 и 64 цели бита в первом случае. И 32, 64 и 32+64 универсальные цели (скорее всего, только на OSX с помощью darwin набор инструментов. И под "работами" я имею в виду, что я только что попробовал его с моей библиотекой Boost на OSX с darwin набор инструментов. Поэтому я подозреваю, что у вас неправильный синтаксис, т. е. не используйте "--name=values", поскольку они не являются параметрами, а вместо этого используют "name=values" - это спецификации требований.


в документации говорится (акцент мой):

"явно запрос или 32-бит или 64-разрядная генерация кода."

обратите внимание, что он не говорит "один или несколько" или "по крайней мере один из", он говорит либо ... или, что подразумевает XOR в моем чтении этого, и ваш опыт соответствует этому.

запятая в списке разрешенных значений - это просто разделение двух элементов в наборе разрешенных значений.


в итоге я сделал следующее:

  • храните 32 сборки lib / dll в отдельной папке с именем / lib32
  • храните сборки 64 lib / dll в папке seaprate с именем / lib64

оба предпочтительно находятся в пути поиска, который boost уже проверяет, например этап или установка.

затем я добавил этот блок сразу после того, как пути поиска собраны под заголовком ( FindBoost.с CMake файл для редактирования находится под share / cmake-3.1 / модули/ папка в папке установки CMake)

начать поиск библиотек boost


...

if (Boost_LIBRARY_DIR)

...

endif ()

#generate 32 and 64 bit paths
if(WIN32)
    if(CMAKE_CL_64)
        #message("Finding BOOST on windows platform (64 bit)")
        SET(BOOST_libdir_suffix_gen "64")
    else()
        #message("Finding BOOST on windows platform (32 bit)")
        SET(BOOST_libdir_suffix_gen "32")
    endif()

    list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS "")
    foreach(SEARCH_DIR_NOPLATFORM ${_boost_LIBRARY_SEARCH_DIRS})
        list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS ${SEARCH_DIR_NOPLATFORM}${BOOST_libdir_suffix_gen})        
    endforeach()
    foreach(SEARCH_DIR_PLATFORM ${_boost_LIBRARY_SEARCH_DIRS_PLATFORMS})
         list (APPEND _boost_LIBRARY_SEARCH_DIRS ${SEARCH_DIR_PLATFORM})
    endforeach()
else()
    # no generation required (?)
endif()  

он повторно добавит все существующие каталоги lib в путь поиска boost для библиотек, суффикс с 64 или 32-битным расширением метка. Это выбирает правильные целевые библиотеки для связывания, и вы можете безопасно регенерировать любую другую зависимую библиотеку cmake (например, CGAL) для целевой сборки 32 или 64 без сброса пути зависимости boost.