GNU/Linux >> Linux の 問題 >  >> Linux

CMake で別の Boost インストールを見つけるにはどうすればよいですか?

同様の問題がありました.CMakeはベンダーがインストールしたブーストのみを見つけましたが、私のクラスターにはローカルにインストールされたバージョンがありました. 使いたかった。レッドハット Linux 6.

とにかく、すべての BOOSTROOT のように見えます 、 BOOST_ROOT 、および Boost_DIR Boost_NO_BOOST_CMAKE も設定しないとイライラします。 (例:コマンドライン -DBoost_NO_BOOST_CMAKE=TRUE に追加 ).

(マルチプラットフォームでの CMake の有用性は認めますが、それでも嫌いです。)


ついに欲しかったものを手に入れることができました

cmake -DCMAKE_INSTALL_PREFIX=$TARGET \
    -DBoost_NO_BOOST_CMAKE=TRUE \
    -DBoost_NO_SYSTEM_PATHS=TRUE \
    -DBOOST_ROOT:PATHNAME=$TARGET \
    -DBoost_LIBRARY_DIRS:FILEPATH=${TARGET}/lib

短いバージョン

BOOST_ROOT だけが必要です ただし、複数のインストールがある場合、または iOS または Android のクロスコンパイルがある場合は、ローカル Boost のシステム検索を無効にする必要があります。 Boost_NO_SYSTEM_PATHS を追加する場合 false に設定されています。

set( BOOST_ROOT "" CACHE PATH "Boost library path" )
set( Boost_NO_SYSTEM_PATHS on CACHE BOOL "Do not search system for Boost" )

通常、これは構文 -D<VAR>=value を使用して CMake コマンドラインで渡されます .

長いバージョン

正式に言えば、FindBoost ページでは、これらの変数を使用して Boost の場所を「ヒント」にする必要があると述べています。

<ブロック引用>

このモジュールは、変数から検索場所に関するヒントを読み取ります:

BOOST_ROOT             - Preferred installation prefix
 (or BOOSTROOT)
BOOST_INCLUDEDIR       - Preferred include directory e.g. <prefix>/include
BOOST_LIBRARYDIR       - Preferred library directory e.g. <prefix>/lib
Boost_NO_SYSTEM_PATHS  - Set to ON to disable searching in locations not
                         specified by these hint variables. Default is OFF.
Boost_ADDITIONAL_VERSIONS
                       - List of Boost versions not known to this module
                         (Boost install locations may contain the version)

これは理論的に正しい呪文になります:

cmake -DBoost_NO_SYSTEM_PATHS=TRUE \
      -DBOOST_ROOT=/path/to/boost-dir

ソースからコンパイルする場合

include( ExternalProject )

set( boost_URL "http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.bz2" )
set( boost_SHA1 "9f1dd4fa364a3e3156a77dc17aa562ef06404ff6" )
set( boost_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/third_party/boost )
set( boost_INCLUDE_DIR ${boost_INSTALL}/include )
set( boost_LIB_DIR ${boost_INSTALL}/lib )

ExternalProject_Add( boost
        PREFIX boost
        URL ${boost_URL}
        URL_HASH SHA1=${boost_SHA1}
        BUILD_IN_SOURCE 1
        CONFIGURE_COMMAND
        ./bootstrap.sh
        --with-libraries=filesystem
        --with-libraries=system
        --with-libraries=date_time
        --prefix=<INSTALL_DIR>
        BUILD_COMMAND
        ./b2 install link=static variant=release threading=multi runtime-link=static
        INSTALL_COMMAND ""
        INSTALL_DIR ${boost_INSTALL} )

set( Boost_LIBRARIES
        ${boost_LIB_DIR}/libboost_filesystem.a
        ${boost_LIB_DIR}/libboost_system.a
        ${boost_LIB_DIR}/libboost_date_time.a )
message( STATUS "Boost static libs: " ${Boost_LIBRARIES} )

次に、このスクリプトを呼び出すときに、boost.cmake スクリプト (私のスクリプトは a サブディレクトリにあります) を含め、ヘッダーを含め、依存関係を示し、ライブラリをリンクする必要があります。

include( boost )
include_directories( ${boost_INCLUDE_DIR} )
add_dependencies( MyProject boost )
target_link_libraries( MyProject
                       ${Boost_LIBRARIES} )

FindBoost.cmake を見てください。 このスクリプトは、Boost の検出とすべての Boost 変数の設定を処理します。通常は /usr/share/cmake-2.6/Modules/ にあります .その中にドキュメントがあります。例:

# These last three variables are available also as environment variables:
#
#   BOOST_ROOT or BOOSTROOT      The preferred installation prefix for searching for
#                                Boost.  Set this if the module has problems finding
#                                the proper Boost installation.
#

BOOST_ROOT とは対照的に、参照している変数は、実際には FindBoost モジュールによって設定される変数です。 CMake プロジェクト構成を編集して BOOST_ROOT を設定する必要はありません (おそらくしたくないでしょう) ことに注意してください。代わりに、環境変数を使用する必要があります。呼び出し

# BOOST_ROOT=/usr/local/... ccmake .


Linux
  1. オプションのパラメータを設定する方法は??

  2. 使用している Fedora のバージョンを確認するにはどうすればよいですか?

  3. .svn ディレクトリを無視するように `find` を取得するにはどうすればよいですか?

  1. Linuxでキーボードの状態を取得するにはどうすればよいですか?

  2. 各フォルダにファイルを作成するにはどうすればよいですか?

  3. ディレクトリ全体で dos2unix を実行するにはどうすればよいですか?

  1. ディレクトリの md5 チェックサムを計算するにはどうすればよいですか?

  2. Linux コマンドを使用してシェルのバージョンを確認するにはどうすればよいですか?

  3. Linux インストールを HDD から SSD に移行するにはどうすればよいですか?