Создавать 32- и 64-битные библиотеки для повышения одновременно? - PullRequest
28 голосов
/ 02 февраля 2012

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

Ответы [ 3 ]

21 голосов
/ 02 февраля 2012

Doing:

b2 address-model=32,64

Или ..

b2 address-model=32,64,32_64

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

11 голосов
/ 02 февраля 2012

Документация гласит (выделено мое):

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

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

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

6 голосов
/ 02 апреля 2015

Я закончил тем, что сделал следующее:

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

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

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

Начните поиск буст-библиотек


...

если (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 к пути расширенного поиска для библиотек, дополненных тегом расширения 64 или 32 бита. При этом выбираются правильные целевые библиотеки для компоновки, и вы можете безопасно восстановить любую другую зависимую библиотеку cmake (например, CGAL) для целевой сборки 32 или 64 без сброса пути зависимостей наддува.

...