使用CMake编译32位与64位项目

Gil*_*ili 27 64-bit linker cmake

如何指定CMake应使用不同的link_directories值,具体取决于目标是32位还是64位?例如,32位二进制文​​件需要与32位Boost链接,64位二进制文​​件需要与64位Boost链接.

Eug*_*ith 30

你沿着这些方向做了些什么

  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} )
Run Code Online (Sandbox Code Playgroud)

  • 什么是cmake开发人员用else(...)部分语法思考.如果顺便说一句,这不是别的.把我弄糊涂了一会儿,直到我记起这一点.新的cmake语法不需要括号中的else,endif内容. (7认同)

rom*_*inf 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})
Run Code Online (Sandbox Code Playgroud)

这将指向BOOST_LIBRARY/ boost/win 32/lib或/ boost/win 64/lib的路径,具体取决于您的体系结构.