2
我想靜態鏈接boost.asio到我的小項目沒有外部庫(只有單個exe/bin文件結果分發)。 Boost.asio需要Boost.system,我開始淹死試圖弄清楚如何編譯這一切。 如何使用cmake使用Boost.asio?與cmake一起使用Boost.asio?
我想靜態鏈接boost.asio到我的小項目沒有外部庫(只有單個exe/bin文件結果分發)。 Boost.asio需要Boost.system,我開始淹死試圖弄清楚如何編譯這一切。 如何使用cmake使用Boost.asio?與cmake一起使用Boost.asio?
如果我理解實際的問題,它基本上要求如何靜態鏈接CMake中的第三方庫。
在我的環境中,我安裝了Boost到/opt/boost
。
最簡單的方法是使用一個CMake的安裝提供FindBoost.cmake
:
set(BOOST_ROOT /opt/boost)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost COMPONENTS system)
include_directories(${Boost_INCLUDE_DIR})
add_executable(example example.cpp)
target_link_libraries(example ${Boost_LIBRARIES})
是找出所有Boost庫,並明確針對系統庫鏈接的一個變體:
set(BOOST_ROOT /opt/boost)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
add_executable(example example.cpp)
target_link_libraries(example ${Boost_SYSTEM_LIBRARY})
如果你不這樣做有一個適當的Boost安裝,那麼有兩種方法可以靜態鏈接庫。第一種方法創建一個進口CMake的目標:
add_library(boost_system STATIC IMPORTED)
set_property(TARGET boost_system PROPERTY
IMPORTED_LOCATION /opt/boost/lib/libboost_system.a
)
include_directories(/opt/boost/include)
add_executable(example example.cpp)
target_link_libraries(example boost_system)
而另一種方法是明確列出庫中target_link_libraries
而不是目標:
include_directories(/opt/boost/include)
add_executable(example example.cpp)
target_link_libraries(example /opt/boost/lib/libboost_system.a)
所有升壓組件可以靜態鏈接。你又有什麼問題? – 2013-03-08 09:34:54
我已經搜索了很多次,每次我發現一些問題,爲什麼我不能編譯它。所以我提出了問題如何做到這一點。我不能用cmake編譯boost的任何部分,也不知道如何用cmake靜態地在我的項目中使用它。 – Fedcomp 2013-03-08 12:04:32
查看'FindBoost.cmake'的內容。你可以在CMake安裝的'Modules /'目錄中找到它。 – arrowd 2013-03-08 17:25:10