ターゲットが32ビットか64ビットかに応じて、CMakeが異なるlink_directories
値を使用するように指定するにはどうすればよいですか?たとえば、32ビットバイナリは32ビットBoostとリンクする必要があり、64ビットバイナリは64ビットBoostとリンクする必要があります。
あなたはこれらの線に沿って何かをします
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} )
私はそれがかなり古い質問であることを知っています。しかし、グーグル「cmake 32 64」で検索すると、それはまだトップです。私はuser434507の答えに似た答えを持っていますが、私の意見ではもう少し読みやすくなっています(cmakeでのif-else構造は好きではありません、見苦しいです):
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 2/libまたは/ boost/win 64/libになります。
特にBoostの場合は、
FIND_LIBRARY(Boost 1.44 COMPONENTS ...)
次に、CMake変数Boost_LIBRARY_DIRSに正しいライブラリパスが含まれます。これは、LINK_DIRECTORIESを使用して設定する必要があります。
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
より一般的なケースは、user434507の回答に正しく記述されています。
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
は、32ビットプラットフォームでは4、64ビットプラットフォームでは8に相当します。8*${CMAKE_SIZEOF_VOID_P}
はそれぞれ32または64に評価されます。C:/Boost_${BITS}
に変わる C:/Boost_32
またはC:/Boost_64
自動的に利点: