在 Windows 用 cmake 產生 Visual Studio 專案寫 Boost 程式

本篇 ShengYu 將介紹如何在 Windows 用 cmake 產生 Visual Studio 專案寫 Boost 程式,Windows 怎麼安裝 boost 請看這篇,確定系統有安裝 boost 後,就開始動手寫程式吧!

用 cmake 來建立 Visual Studio 專案

要讓 cmake 能夠使用 boost,要先設定 BOOST_ROOT、BOOST_INCLUDEDIR、BOOST_LIBRARYDIR 三個變數才能順利找到 boost 的路徑與 cmake 相關變數
可以在下 cmake 時後面帶參數,也可以在CMakeList.txt裡用 set 設定。
這邊會用到的變數為 BOOST_ROOT、BOOST_INCLUDEDIR、BOOST_LIBRARYDIR,最後可在 CMakeList.txt 裡 確認Boost_FOUND 這個變數看看有沒有找到 Boost。

1
2
3
4
5
cmake .. \
-G "Visual Studio 14 2015 Win64" \
-DBOOST_ROOT:PATH=C:/osvr/boost_1_66_0 \
-DBOOST_INCLUDEDIR:PATH=C:/osvr/boost_1_66_0 \
-DBOOST_LIBRARYDIR:PATH=C:/osvr/boost_1_66_0/libs

補充︰我使用到 cmake 版本是3.xx,按照它內部的 FindBoost.cmake 來看只能找到1.70以下

寫專案的 CMakeList.txt

CMakeList.txt project 使用 Boost_INCLUDE_DIRS、Boost_LIBRARIES變數。

1
2
3
4
5
6
find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(foo foo.cc)
target_link_libraries(foo ${Boost_LIBRARIES})
endif()

寫一個簡單的 Boost 程式

boost_example.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;

std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

執行程式

1
echo 1 2 3 | ./boost_example

結果輸出如下:

1
3 6 9

參考
[1] FindBoost — CMake 3.16.2 Documentation
https://cmake.org/cmake/help/v3.16/module/FindBoost.html
[2] CMake/FindBoost.cmake at master · Kitware/CMake · GitHub
https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake