在Clion设置Boost

dim*_*s93 7 c++ boost mingw clion

如何Boost在Clion中使用MinGW库?我已下载并解压缩boost_1_60_0.zip至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})
Run Code Online (Sandbox Code Playgroud)

找不到Boost:

1

小智 8

以下是使用 Boost 正则表达式库的 CLion 示例项目。它引用了本教程。

目标:使用 CLion 创建处理 jayne.txt 的 .exe,如 Boost 教程中所示。

我的示例围绕使用 GCC 构建 Boost 库二进制文件、在 CLion 中配置项目以及使用 CMake 进行。它很有表现力,甚至可能有点矫枉过正,但我​​相信你可以适应。另一方面,我将尝试使项目本身尽可能独立于系统。

配置:

  • 操作系统: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...
Run Code Online (Sandbox Code Playgroud)

我保持 Boost root 不变——我没有创建任何其他目录。这将 Boost 源与创建的工具和库分开,因此我可以展示如何显式指定这些目录。

获取 Boost 库二进制文件

我决定使用 GCC 从源代码构建库。

  1. 下载并解压Boost ( "D:\SDK\boost\boost_1_68_0");
  2. 构建库(5.2):

    1. \tools\build打开Boost root 的命令提示符( "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。这将在下创建 b2.exe"D:\SDK\boost\1_68_0\build\bin"
    4. 将命令提示符移至 Boost root ( 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-regexD:\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
      
      Run Code Online (Sandbox Code Playgroud)

CMake 在库文件夹中查找具有特定名称的文件,因此请务必(复制并)更改其中.a文件之一的名称。对于这个例子,我更改 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

配置 CLion

转到(在 Windows 上)File -> Settings -> Build, Execution, Deployment -> CMake,并使用 ,CMake options添加 Boost 根目录的路径-DBOOST_ROOT=,即:-DBOOST_ROOT="D:\SDK\boost\boost_1_68_0"。如果包含构建库的目录位于 Boost root 之外,请添加-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})
Run Code Online (Sandbox Code Playgroud)

选项 2:动态链接

CMakeLists.txt 应该看起来像静态链接,但删除target_link_libraries(CLionBoostRegex -static)行。

构建项目后,请确保将.dll库复制到具有可执行文件 ( ) 的目录以及libboost_regex-mgw63-mt-x32-1_68.dll目录( ) (或考虑在 CMakeLists.txt 中包含行或添加到设置中)。libstdc++-6.dllMinGW\binD:\SDK\MinGW\bintarget_link_libraries(CLionBoostRegex -static-libstdc++)-DCMAKE_CXX_FLAGS="-static-libstdc++"CMake options

运行你的程序(6.4)

  1. 构建您的目标(它cmake-build-debug\使用默认配置创建目录)(如果您选择动态链接,请确保添加必要的.dll)
  2. 在可执行文件的目录中创建jayne.txt包含以下内容的文件:

    To: George Shmidlap
    From: Rita Marlowe
    Subject: Will Success Spoil Rock Hunter?
    ---
    See subject.
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在那里打开命令提示符
  4. 跑步CLionBoostRegex.exe < jayne.txt
  5. 程序应输出Will Success Spoil Rock Hunter?如教程所示。

笔记

更改.a库的名称并选择-static链接会导致事后最少的工作 - 您不必以更大的可执行文件大小为代价复制任何其他库。当可执行文件大小更重要时,您可以更改.dllBoost 库目录中库的名称,然后复制缺少的.dlls 为您的.exe(即:libboost_regex-mgw63-mt-x32-1_68.dll和libstdc++-6.dll)。

您可以set(Boost_DEBUG ON)在 CMakeLists.txt或 -DBoost_DEBUG=1to中包含行CMake options来获取一些宝贵的信息。

我使用其他问题来写这篇文章,最值得注意的是:1、2、3、4。


Hel*_*his 7

我使用Stephan T. Lavavej的MinGW发行版预装了Boost库.

在我的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})
Run Code Online (Sandbox Code Playgroud)

这篇文章帮助我顺利完成. 如何使用CMake将外部库(boost)包含到CLion C++项目中?