如何指定CMake应使用不同的link_directories
值,具体取决于目标是32位还是64位?例如,32位二进制文件需要与32位Boost链接,64位二进制文件需要与64位Boost链接。
答案 0 :(得分:28)
你可以沿着这些方向做点什么
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} )
答案 1 :(得分:12)
我知道这是一个很老的问题。但是,当您使用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,具体取决于您的架构。
答案 2 :(得分:4)
对于Boost,您应该使用
FIND_LIBRARY(Boost 1.44 COMPONENTS ...)
然后CMake变量Boost_LIBRARY_DIRS将包含正确的库路径,必须使用LINK_DIRECTORIES设置,例如
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
更一般的情况在user434507的答案中正确描述。
答案 3 :(得分:0)
基于rominf我出现了以下解决方案(适用于Windows)。 我将boost库安装到: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
在32位平台上等于4,在64位平台上等于8。8*${CMAKE_SIZEOF_VOID_P}
将评估为32或64,
分别C:/Boost_${BITS}
自动变为C:/Boost_32
或C:/Boost_64
优点: