Компиляция 32-битного или 64-битного проекта с использованием CMake - PullRequest
26 голосов
/ 27 октября 2010

Как мне указать, что CMake должен использовать другое значение link_directories в зависимости от того, является ли цель 32-битной или 64-битной?Например, 32-разрядные двоичные файлы должны быть связаны с 32-разрядным ускорением, 64-разрядные двоичные файлы должны быть связаны с 64-разрядным ускорением.

Ответы [ 4 ]

29 голосов
/ 27 октября 2010

Вы делаете что-то в этом духе

  if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
    set( BOOST_LIBRARY "/boost/win64/lib" )
  else( CMAKE_SIZEOF_VOID_P EQUAL 8 )
    set( BOOST_LIBRARY "/boost/win32/lib" )
  endif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
  set( CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY} )
12 голосов
/ 13 апреля 2013

Я знаю, что это довольно старый вопрос.Но это все еще на вершине, когда вы ищете с Google "cmake 32 64".У меня есть ответ, аналогичный ответу пользователя user434507, но, на мой взгляд, он более читабелен (мне не нравится конструкция if-else в cmake, она выглядит ужасно):

math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
set(BOOST_LIBRARY "/boost/win${BITS}/lib")
set(CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY})

Это будет указывать BOOST_LIBRARY путьв / boost / win 32 / lib или / boost / win 64 / lib, в зависимости от вашей архитектуры.

4 голосов
/ 27 октября 2010

Специально для Boost следует использовать

FIND_LIBRARY(Boost 1.44 COMPONENTS ...)

Тогда переменная CMake Boost_LIBRARY_DIRS будет содержать правильный путь к библиотеке, который должен быть установлен с помощью LINK_DIRECTORIES, например,

LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})

Более общий случай правильно описан в ответе пользователя 434507.

0 голосов
/ 01 сентября 2017

На основе rominf я нашел следующее решение (для Windows).Я устанавливаю библиотеки повышения в: C: \ Boost_32 и C: \ Boost_64

В CMakeLists.txt

math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
set(BOOST_ROOT C:/Boost_${BITS})  

find_package(Boost 1.64.0 COMPONENTS ... )

INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR}  )
LINK_DIRECTORIES(${Boost_LIBRARY_DIR})

Объяснение:

  • CMAKE_SIZEOF_VOID_P равнодо 4 на 32-битной платформе и 8 на 64-битной платформе.
  • Выражение 8*${CMAKE_SIZEOF_VOID_P} будет оцениваться до 32 или 64 соответственно.
  • C:/Boost_${BITS} превращается в C:/Boost_32 или C:/Boost_64 автоматически

Преимущества:

  • Вам не нужны условные выражения (а в моих списках CMake уже их слишком много),
  • Это на 90% больше, чем вы'Должен' включать Boost с CMake.
...