GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mendapatkan CMake untuk menemukan instalasi Boost alternatif saya?

Saya memiliki masalah serupa, CMake hanya menemukan Boost yang diinstal vendor, tetapi klaster saya memiliki versi yang diinstal secara lokal yang I ingin itu digunakan. Red Hat Linux 6.

Pokoknya, sepertinya semua BOOSTROOT , BOOST_ROOT , dan Boost_DIR hal-hal akan terganggu kecuali ada juga yang menyetel Boost_NO_BOOST_CMAKE (misalnya tambahkan ke baris cmd -DBoost_NO_BOOST_CMAKE=TRUE ).

(Saya akan mengakui kegunaan CMake untuk multiplatform, tapi saya masih bisa membencinya.)


Saya akhirnya bisa mendapatkan apa yang saya inginkan

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

Versi singkat

Anda hanya membutuhkan BOOST_ROOT , tetapi Anda ingin menonaktifkan pencarian sistem untuk Boost lokal Anda jika Anda memiliki beberapa instalasi atau kompilasi silang untuk iOS atau Android. Dalam hal ini tambahkan Boost_NO_SYSTEM_PATHS disetel ke false.

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

Biasanya ini diteruskan pada baris perintah CMake menggunakan sintaks -D<VAR>=value .

Versi yang lebih panjang

Secara resmi, halaman FindBoost menyatakan bahwa variabel ini harus digunakan untuk 'mengisyaratkan' lokasi Boost.

Modul ini membaca petunjuk tentang lokasi pencarian dari variabel:

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)

Ini membuat mantra yang benar secara teori:

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

Saat Anda mengompilasi dari sumber

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} )

Kemudian ketika Anda memanggil skrip ini, Anda harus menyertakan skrip boost.cmake (milik saya ada di subdirektori a), sertakan header, tunjukkan ketergantungan, dan tautkan pustaka.

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

Anda harus melihat FindBoost.cmake skrip, yang menangani deteksi Peningkatan dan menyiapkan semua variabel Peningkatan. Biasanya berada di /usr/share/cmake-2.6/Modules/ . Di dalamnya, Anda akan menemukan dokumentasi. Misalnya:

# 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.
#

Berbeda dengan BOOST_ROOT, variabel yang Anda maksud sebenarnya adalah variabel yang diatur oleh modul FindBoost. Perhatikan bahwa Anda tidak perlu (dan mungkin juga tidak ingin) mengedit konfigurasi proyek CMake Anda untuk menyetel BOOST_ROOT. Sebagai gantinya, Anda harus menggunakan variabel lingkungan, mis. menelepon

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


Linux
  1. Bagaimana cara menemukan versi Fedora yang saya gunakan?

  2. Bagaimana saya bisa mendapatkan `find` untuk mengabaikan direktori .svn?

  3. Bagaimana saya bisa mendapatkan status keyboard di Linux?

  1. Bagaimana saya bisa mengatur 'backend' di matplotlib dengan Python?

  2. Bagaimana saya bisa membuat file di setiap folder?

  3. Bagaimana saya bisa menjalankan dos2unix di seluruh direktori?

  1. Bagaimana saya bisa mendapatkan nilai unik dari array di Bash?

  2. Bagaimana saya bisa menemukan versi shell saya menggunakan perintah Linux?

  3. Bagaimana saya bisa menemukan antarmuka jaringan yang tersedia?