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
が見つかりません:
私は、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++プロジェクトに含める方法は?
Boostの正規表現ライブラリを使用するCLionのサンプルプロジェクトを次に示します。 this チュートリアルを参照しています。
目標:ブーストのチュートリアルに示されているように、CLionを使用してjayne.txtを処理する.exeを作成します。
私の例は、GCCでBoost Library Binaryを構築し、CLionでプロジェクトを構成し、CMakeを使用することを中心に展開しています。それは非常に表現力豊かで、多分やり過ぎかもしれませんが、あなたは適応できると信じています。一方で、プロジェクト自体を可能な限りシステムに依存しないようにしようと思います。
構成:
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ソースが作成されたツールやライブラリから分離されるため、これらのディレクトリを明示的に指定する方法を示すことができます。
GCCを使用してソースからライブラリを構築することにしました。
"D:\SDK\boost\boost_1_68_0"
_);をダウンロードして解凍します。ライブラリをビルドする (5.2) :
\tools\build
_でコマンドプロンプトを開きます(_"D:\SDK\boost\boost_1_68_0\tools\build"
_)bootstrap.bat
_を実行します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が作成されますcd "D:\SDK\boost\boost_1_68_0"
_)(_"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
_に変更しました。
新しいプロジェクトを作成し(この例では、その名前は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;
}
}
_
(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"
_)。コマンドはスペースで区切られます。
静的リンクと動的リンクのどちらが必要かを決定します。
静的リンクの場合、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})
_
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
_)。
cmake-build-debug\
_ディレクトリを作成します)(ダイナミックリンクを選択した場合は、必ず必要な_.dll
_ sを追加してください)実行可能ファイルのあるディレクトリに、次の内容の_jayne.txt
_ファイルを作成します。
_To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.
_
CLionBoostRegex.exe < jayne.txt
_を実行します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)
行を含めて、貴重な情報を取得できます。