Giriş
En basit kullanım şekli şöyle
Şöyle yaparız.set(...) çağrısı ile aynıdır.
Şöyle yaparız.
Şöyle yaparız.
Not : Eğer CMake sürümü eski ise find_package modülü şu hatayı verir.
Header only kütüphaneler için kullanılır. Eğer lib.a gibi bir kütüphane için kullanırsak hata alırız. Şu kullanım yanlış.
Birden fazla boost sürümü kurulu ise tercih ettiğimiz sürümü belirtmek için şöyle yaparız. Bu sürüm find_package'a sadece bir öneri niteliği taşır. find_package'ı bu sürümü kullanmak için zorlamaz yani find_package bu sürümü tercih edilmeyebilir!
Çıktı istemezsek şöyle yaparız.
Şöyle yaparız.
coroutine
context
filesystem
mpi
program_options
python
regex
thread
signals
system
Boost'un varlığını şöyle kontrol etmek için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle
Visual Studio kullanıyorsak boost'tan kullanmak istediğimiz kütüphanaleri belirtmeye gerek yok. Auto linking ile sorun halloluyor. Bu özelliği kapatmak için şunu tanımlarız.
2. Gcc
Gcc kulllanıyorsak kütüphanaleri belirtmek lazım.
Örnek
Şöyle yaparız.
Şöyle yaparız. Boost::system şeklinde kullanınca system kütüphanesinin bağımlı olduğu diğer kütüphaneler de otomatik olarak linklenir.
Şöyle yaparız.
Bazıları şöyle yapıyor. Ben bu kullanımı sevmiyorum.
Şöyle yaparız.
1. BOOST_ROOT
Açıklaması şöyle
VS 2017'den itibaren CMake IDE içinde geliyor. Menüden CMake->Change CMake Settings->CMakeLists.txt yolunu izlersek CMakeSettings.json dosyası açılır. İçi şöyledir.
En basit kullanım şekli şöyle
cmake_minimum_required(VERSION 2.8)
find_package(Boost REQUIRED filesystem system)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(mytarget ${Boost_LIBRARIES})
1. optionŞöyle yaparız.set(...) çağrısı ile aynıdır.
option(Boost_USE_STATIC_LIBS "Use Boost static version" ON)
2. setŞöyle yaparız.
set(BOOST_ROOT <where you built boost>)
Şöyle yaparız.set(Boost_USE_STATIC_LIBS ON)
Bu satır ile libboost_date_time.a, libboost_random.a, libboost_system.a gibi .a ile biten kütüphaneler linklenir.Şöyle yaparız.
set(Boost_USE_MULTITHREADED ON)
Şöyle yaparız.set(Boost_USE_STATIC_RUNTIME OFF)
Şöyle yaparız.set(BOOST_MIN_VERSION "1.55.0")
Şöyle yaparız.set(BOOST_VER "1.61.0")
set(Boost_VERSION 106100)
Şöyle yaparız.set(Boost_FIND_QUIETLY 0 )
set(Boost_DEBUG 1)
Şöyle yaparız.. Bunun yerine target_link_libraries kullanılsa daha iyiset(CMAKE_CXX_FLAGS "-lboost_program_options")
3. find_packageNot : Eğer CMake sürümü eski ise find_package modülü şu hatayı verir.
Imported targets not available for Boost version 106300
CMake kurulumundaki FindBoost modülü çalışır. Çıktılarda şuna benzer satırlar görülür./usr/share/cmake-3.5/Modules/FindBoost.cmake ......
Şöyle yaparız.find_package (Boost)
CONFIGHeader only kütüphaneler için kullanılır. Eğer lib.a gibi bir kütüphane için kullanırsak hata alırız. Şu kullanım yanlış.
find_package(Boost CONFIG REQUIRED COMPONENTS system)
EXACTBirden fazla boost sürümü kurulu ise tercih ettiğimiz sürümü belirtmek için şöyle yaparız. Bu sürüm find_package'a sadece bir öneri niteliği taşır. find_package'ı bu sürümü kullanmak için zorlamaz yani find_package bu sürümü tercih edilmeyebilir!
set(BOOST_VERSION_REQUIRED "your version value here") # adjust as needed
find_package(Boost ${BOOST_VERSION_REQUIRED} REQUIRED regex date_time ...)
Tam olarak hangi sürümü bulmak istediğimizi belirtmek için şöyle yaparız.# Add old boost library
set(BOOST_VERSION_REQUIRED "1.63.0")
find_package(Boost ${BOOST_VERSION_REQUIRED} EXACT REQUIRED
regex date_time system filesystem thread graph program_options serialization
iostreams chrono atomic)
QUIETÇıktı istemezsek şöyle yaparız.
find_package(Boost 1.54.0 QUIET REQUIRED COMPONENTS
system program_options regex filesystem
)
REQUIREDŞöyle yaparız.
find_package(Boost REQUIRED COMPONENTS ...)
Şu kütüphaneler kullanılabilir.coroutine
context
filesystem
mpi
program_options
python
regex
thread
signals
system
Boost'un varlığını şöyle kontrol etmek için şöyle yaparız.
IF(Boost_FOUND)
...
ELSEIF(NOT Boost_FOUND)
MESSAGE(FATAL_ERROR "Set BOOST_ROOT")
ENDIF()
find işleminden sonra bazı ortam değişkenleri atanır. Ortam değişkenlerinin hepsi küçük harfle yani "Boost_XXX" şeklinde başlarlar. Kazara "BOOST_XXX" kullanılabiliyor. Şu kullanım şekli yanlıştarget_link_libraries(myapp ${BOOST_LIBRARIES})
Açıklaması şöyleBazı ortam değişkenlerini şöyle görebiliriz.Boost_FOUND - True if headers and requested libraries were foundBoost_INCLUDE_DIRS - Boost include directoriesBoost_LIBRARY_DIRS - Link directories for Boost librariesBoost_LIBRARIES - Boost component libraries to be linked
message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
message(STATUS "Boost_VERSION: ${Boost_VERSION}")
Kolay kullanım için şöyle yaparız.if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(myapp main.cpp)
target_link_libraries(myapp ${Boost_LIBRARIES})
endif()
Şöyle yaparız.cmake_minimum_required(VERSION 3.7)
project(untitled)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(untitled ${SOURCE_FILES})
find_package(Boost COMPONENTS system filesystem REQUIRED)
IF (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR})
target_link_libraries(untitled
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
)
endif()
4. include_directoriesŞöyle yaparız.
include_directories(${Boost_INCLUDE_DIRS})
5. target_include_directoriesŞöyle yaparız.
target_include_directories(myapp ${Boost_INCLUDE_DIRS})
6. target_link_libraries
Açıklaması şöyle
Boost provides 3 ways of linking their library: single-header, static library and shared library.1. Visual Studio
Visual Studio kullanıyorsak boost'tan kullanmak istediğimiz kütüphanaleri belirtmeye gerek yok. Auto linking ile sorun halloluyor. Bu özelliği kapatmak için şunu tanımlarız.
BOOST_ALL_NO_LIB
Eğer auto linking açık ise ve dll kullanmak istiyorsak BOOST_ALL_DYN_LINK macrosu tanımlanır. Açıklaması şöyle.Forces all libraries that have separate source, to be linked as dll's rather than static libraries on Microsoft WindowsEğer bu macro tanımlı değilse Windows'ta static linkleme yapılır. Yani boost dll'lerini dağıtmaya gerek yoktur.
2. Gcc
Gcc kulllanıyorsak kütüphanaleri belirtmek lazım.
Örnek
Şöyle yaparız.
target_link_libraries(${PROJECT_NAME}
Boost::log)
ÖrnekŞöyle yaparız. Boost::system şeklinde kullanınca system kütüphanesinin bağımlı olduğu diğer kütüphaneler de otomatik olarak linklenir.
target_link_libraries(myapp Boost::system)
ÖrnekŞöyle yaparız.
target_link_libraries(myapp Boost::thread)
ÖrnekBazıları şöyle yapıyor. Ben bu kullanımı sevmiyorum.
target_link_libraries(myapp ${Boost_LIBRARIES
})
ÖrnekŞöyle yaparız.
target_link_libraries(myapp
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
)
komut satırı1. BOOST_ROOT
Açıklaması şöyle
BOOST_ROOT - Preferred installation prefix
BOOST_ROOT tanımlanır. Gerekirse ortam değişkeninden kullanılır. Şöyle yaparız.cmake .. -DBOOST_ROOT=/home/user/boost
Diğer değişkenleri de kontrol etmek istersek şöyle yaparız.cmake -DBOOST_ROOT=... -DBOOST_INCLUDEDIR=... -DBOOST_LIBRARYDIR=...
-DBOOST_VER:STRING=... ./
2. Boost_COMPILER
Şöyle yaparız.
Açıklaması şöyle
4. BOOST_LIB
Şöyle yaparız.
cmake -G "Visual Studio 15 2017" ..
-DBOOST_ROOT="C:\libs\boost_1_65_0"
-DBOOST_LIBRARYDIR="C:\libs\boost_1_65_0\lib64-msvc-15.0"alo
-DBoost_Compiler="-vc141"
3. BOOST_INCLUDEDIRAçıklaması şöyle
# This module reads hints about search locations from variables::
#
# 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)
4. BOOST_LIB
BOOST_ROOT 'a bakarak kendimiz tanımlamak istersek şöyle yaparız.
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(Boost_LIBRARY_DIR ${BOOST_ROOT}/stage64/lib
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(Boost_LIBRARY_DIR ${BOOST_ROOT}/stage/lib
endif()
Visual StudioVS 2017'den itibaren CMake IDE içinde geliyor. Menüden CMake->Change CMake Settings->CMakeLists.txt yolunu izlersek CMakeSettings.json dosyası açılır. İçi şöyledir.
{
"configurations": [
{
"name": "x86-Debug",
"generator": "Visual Studio 15 2017",
"configurationType": "Debug",
"buildRoot": "${env.LOCALAPPDATA}\\CMakeBuild\\${workspace}\\build\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "\"-m -v:minimal\"."
},...
Hiç yorum yok:
Yorum Gönder