Wie lege ich fest, dass CMake einen anderen link_directories
-Wert verwenden soll, abhängig davon, ob das Ziel 32-Bit oder 64-Bit ist? Beispielsweise müssen 32-Bit-Binärdateien mit 32-Bit-Boost verbunden werden, 64-Bit-Binärdateien müssen mit 64-Bit-Boost verknüpft werden.
Sie machen etwas in dieser Richtung
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} )
Ich weiß, dass es eine ziemlich alte Frage ist. Es ist aber immer noch ganz oben, wenn Sie mit Google "cmake 32 64" suchen. Ich habe eine ähnliche Antwort wie die Antwort von user434507, aber meiner Meinung nach etwas lesbarer (ich mag nicht, ob-else Konstruktion in cmake, sie sieht hässlich aus):
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
set(BOOST_LIBRARY "/boost/win${BITS}/lib")
set(CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY})
Dies wird BOOST_LIBRARY
Pfad zu/boost/win 32 / lib oder/boost/win 64 / lib zeigen, abhängig von Ihrer Architektur.
Für Boost sollten Sie speziell verwenden
FIND_LIBRARY(Boost 1.44 COMPONENTS ...)
Dann enthält die CMake-Variable Boost_LIBRARY_DIRS den richtigen Bibliothekspfad, der mit LINK_DIRECTORIES festgelegt werden muss, z.
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
Der allgemeinere Fall ist in der Antwort von user434507 richtig beschrieben.
Basierend auf rominf habe ich folgende Lösung gefunden (für Windows). Ich installiere Boost-Bibliotheken in: C:\Boost_32 und C:\Boost_64
In 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})
Erläuterung:
CMAKE_SIZEOF_VOID_P
entspricht 4 auf der 32-Bit-Plattform und 8 auf der 64-Bit-Plattform.8*${CMAKE_SIZEOF_VOID_P}
ergibt 32 bzw. 64.C:/Boost_${BITS}
wird automatisch zu C:/Boost_32
oder C:/Boost_64
Vorteile: