web-dev-qa-db-ja.com

Clionでブーストを設定する

MinGWでClionのBoostライブラリを使用する方法は?ダウンロードして解凍しました boost_1_60_0.Zip to C:\boost_1_60_0。私は今何をすべきですか?何かをインストールする必要がありますか?これが私のCMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(server_client)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -s -O3")
set(CMAKE_EXE_LINKER_FLAGS -static)

set(BOOST_ROOT "C:/boost_1_60_0")
set(BOOSTROOT "C:/boost_1_60_0")
find_package(Boost 1.60.0)
if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

set(SOURCE_FILES chat_server.cpp)
add_executable(server_client ${SOURCE_FILES})

Boostが見つかりません:

1

7
dimitris93

私は、Boostライブラリが事前に構築されたStephan T. Lavavejによる MinGW ディストリビューションを使用します。

Cmaklist.txtにこれを追加しました

set(Boost_INCLUDE_DIR c:/mingw/include/)
set(Boost_LIBRARY_DIR c:/mingw/lib/)
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

この投稿は私がそれを実行するのに役立ちます。 CMakeを使用して外部ライブラリ(ブースト)をCLion C++プロジェクトに含める方法は?

7
Hellonearthis

Boostの正規表現ライブラリを使用するCLionのサンプルプロジェクトを次に示します。 this チュートリアルを参照しています。

目標:ブーストのチュートリアルに示されているように、CLionを使用してjayne.txtを処理する.exeを作成します。

私の例は、GCCでBoost Library Binaryを構築し、CLionでプロジェクトを構成し、CMakeを使用することを中心に展開しています。それは非常に表現力豊かで、多分やり過ぎかもしれませんが、あなたは適応できると信じています。一方で、プロジェクト自体を可能な限りシステムに依存しないようにしようと思います。

構成:

  • OS:Windows 8.1
  • CLion:2018.2.4
  • ブースト:1.68.0
  • コンパイラ:GCC-6.3.0(MinGW提供)

MinGWは、 その指示 および JetBrainsの提案 に従って構成されました。 (それが重要な場合は、MinGW 14/10/2018のセットアップをダウンロードしました。)

ツール構造についての一言

私はBoostとその周辺のもののために次の構造を作成することにしました:

_D:\
  SDK\
    boost\
      boost_1_68_0\     # untouched Boost root
        boost\
        rst.css
        ...other directories and files...
      1_68_0\
        build\          # dir for Boost.Build, b2.exe
        buildDir\       # intermediate dir for creating libraries
        stageDir\       # dir for libraries
          lib\
    MinGW\
      bin\
      ...other directories...
_

Boostルートはそのままにしておきました-追加のディレクトリは作成しませんでした。これにより、Boostソースが作成されたツールやライブラリから分離されるため、これらのディレクトリを明示的に指定する方法を示すことができます。

Boostライブラリバイナリを取得する

GCCを使用してソースからライブラリを構築することにしました。

  1. Boost(_"D:\SDK\boost\boost_1_68_0"_);をダウンロードして解凍します。
  2. ライブラリをビルドする (5.2)

    1. ブーストルートの_\tools\build_でコマンドプロンプトを開きます(_"D:\SDK\boost\boost_1_68_0\tools\build"_)
    2. _bootstrap.bat_を実行します
    3. _b2 install --prefix="D:\SDK\boost\1_68_0\build" --toolset=gcc-6.3.0_を実行します。これにより、_"D:\SDK\boost\1_68_0\build\bin"_の下にb2.exeが作成されます
    4. コマンドプロンプトをブーストルートに移動します(_cd "D:\SDK\boost\boost_1_68_0"_)
    5. (_"D:\SDK\boost\1_68_0\build\bin\b2.exe --show-directories"_の使用を検討できます。この手順には時間がかかる場合があるため、次のコマンドでビルドするライブラリ(_--with-library-name_)を指定する価値があります。)_"D:\SDK\boost\1_68_0\build\bin\b2" --build-dir="D:\SDK\boost\1_68_0\buildDir" toolset=gcc-6.3.0 --build-type=complete stage --stagedir="D:\SDK\boost\1_68_0\stageDir" --with-regex_を実行します。 _D:\SDK\boost\1_68_0\stageDir\lib_ディレクトリの下に次のファイルを作成します。

      _libboost_regex-mgw63-mt-d-x32-1_68.a
      libboost_regex-mgw63-mt-d-x32-1_68.dll
      libboost_regex-mgw63-mt-d-x32-1_68.dll.a
      libboost_regex-mgw63-mt-sd-x32-1_68.a
      libboost_regex-mgw63-mt-s-x32-1_68.a
      libboost_regex-mgw63-mt-x32-1_68.a
      libboost_regex-mgw63-mt-x32-1_68.dll
      libboost_regex-mgw63-mt-x32-1_68.dll.a
      _

CMakeはライブラリフォルダで特定の名前のファイルを探すので、そこにある_.a_ファイルの1つの名前を(コピーして)変更してください。この例では、_libboost_regex-mgw63-mt-x32-1_68.a_を_boost_regex.a_に変更しました。

CLionプロジェクトを作成する

新しいプロジェクトを作成し(この例では、その名前はCLionBoostRegex)、コンテンツをmain.cppに配置します (6)

_#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );

    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}
_

CLionを構成する

(Windowsの場合)_File -> Settings -> Build, Execution, Deployment -> CMake_に移動し、_CMake options_で_-DBOOST_ROOT=_を使用してBoostルートディレクトリへのパスを追加します。つまり、_-DBOOST_ROOT="D:\SDK\boost\boost_1_68_0"_です。ライブラリがビルドされたディレクトリがBoostルートの外部に配置されている場合は、_-DBOOST_LIBRARYDIR=_を付けて追加します(例:_-DBOOST_LIBRARYDIR="D:\SDK\boost\1_68_0\stageDir\lib"_)。コマンドはスペースで区切られます。

静的リンクと動的リンクのどちらが必要かを決定します。

オプション1:静的リンク

静的リンクの場合、CMakeLists.txtは次のようになります。

_cmake_minimum_required(VERSION 3.12)
project(CLionBoostRegex)
set(CMAKE_CXX_STANDARD 98)

find_package(Boost REQUIRED COMPONENTS regex)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(CLionBoostRegex main.cpp)
target_link_libraries(CLionBoostRegex -static)
target_link_libraries(CLionBoostRegex ${Boost_LIBRARIES})
_

オプション2:ダイナミックリンク

CMakeLists.txtは静的リンクのように見えるはずですが、target_link_libraries(CLionBoostRegex -static)行を削除してください。

プロジェクトをビルドした後、_.dll_ライブラリを実行可能ファイル(_libboost_regex-mgw63-mt-x32-1_68.dll_)とともに_libstdc++-6.dll_ from _MinGW\bin_のあるディレクトリにコピーしてください。ディレクトリ(_D:\SDK\MinGW\bin_)(またはCMakeLists.txtにtarget_link_libraries(CLionBoostRegex -static-libstdc++)行を含めることを検討してくださいまたは追加設定の_-DCMAKE_CXX_FLAGS="-static-libstdc++"_から_CMake options_)。

プログラムを実行します (6.4)

  1. ターゲットをビルドします(デフォルトの構成で_cmake-build-debug\_ディレクトリを作成します)(ダイナミックリンクを選択した場合は、必ず必要な_.dll_ sを追加してください)
  2. 実行可能ファイルのあるディレクトリに、次の内容の_jayne.txt_ファイルを作成します。

    _To: George Shmidlap
    From: Rita Marlowe
    Subject: Will Success Spoil Rock Hunter?
    ---
    See subject.
    _
  3. コマンドを開くプロンプトが表示されます
  4. _CLionBoostRegex.exe < jayne.txt_を実行します
  5. プログラムは、チュートリアルに示すように_Will Success Spoil Rock Hunter?_を出力する必要があります。

ノート

_.a_ライブラリの名前を変更し、_-static_リンクを選択すると、その後の労力が最小限に抑えられます。実行可能ファイルのサイズが大きくなる代わりに、追加のライブラリをコピーする必要はありません。実行可能ファイルのサイズがより重要な場合は、代わりにBoostライブラリディレクトリの_.dll_ライブラリの名前を変更し、不足している_.dll_を_.exe_にコピーできます(例:_libboost_regex-mgw63-mt-x32-1_68.dll_および_libstdc++-6.dll_)。

CMakeLists.txtまたは_-DBoost_DEBUG=1_から_CMake options_にset(Boost_DEBUG ON)行を含めて、貴重な情報を取得できます。

私はこの投稿を書くために他の質問を使用しました、特に: 12 、、 4

3
kszyniu
  1. まず、 ブーストを開始する でなければなりません。なので boost.asioはヘッダーのみのライブラリではないため、ライブラリが適切に作成されていることを確認する必要があります build

  2. 次に、ヘッダーとライブラリの正しいパスを取るようにCLionを構成する必要があります。この2番目の質問の解決策は、この SO質問 にあります。

0
Christophe