Comment puis-je spécifier que CMake doit utiliser une valeur link_directories
différente selon que la cible est 32 bits ou 64 bits? Par exemple, les fichiers binaires 32 bits doivent être liés à Boost 32 bits, tandis que les fichiers binaires 64 bits doivent être liés à Boost 64 bits.
Vous faites quelque chose dans ce sens
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} )
Je sais que c'est une question assez ancienne. Mais c'est toujours au top lorsque vous effectuez une recherche avec Google "cmake 32 64". J'ai une réponse similaire à celle de user434507 mais un peu plus lisible à mon avis (je n'aime pas la construction if-else dans cmake, elle a l'air moche):
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
set(BOOST_LIBRARY "/boost/win${BITS}/lib")
set(CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY})
Ceci indiquera BOOST_LIBRARY
chemin vers/boost/win 32 / lib ou/boost/win 64 / lib, selon votre architecture.
Pour Boost spécifiquement, vous devriez utiliser
FIND_LIBRARY(Boost 1.44 COMPONENTS ...)
Ensuite, la variable CMake Boost_LIBRARY_DIRS contiendra le chemin de bibliothèque correct, qui doit être défini à l'aide de LINK_DIRECTORIES, par exemple.
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
Le cas plus général est correctement décrit dans la réponse de user434507.
Basé sur rominf, j’ai trouvé la solution suivante (pour Windows). J'installe les librairies boost dans: C:\Boost_32 et C:\Boost_64
Dans 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})
Explication:
CMAKE_SIZEOF_VOID_P
est égal à 4 sur la plate-forme 32 bits et 8 sur la plate-forme 64 bits.8*${CMAKE_SIZEOF_VOID_P}
sera évaluée à 32 ou 64, respectivement.C:/Boost_${BITS}
se transforme en C:/Boost_32
ou C:/Boost_64
automatiquementAvantages: