在Clion设置Boost

时间:2016-04-09 16:17:24

标签: c++ boost mingw clion

如何在Clion中使用Boost库和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})

找不到Boost

1

3 个答案:

答案 0 :(得分:6)

我使用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})

这篇文章帮助我顺利完成。 How to include external library (boost) into CLion C++ project with CMake?

答案 1 :(得分:2)

这里是使用Boost的regex库的CLion的示例项目。它引用了this教程。

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

我的示例围绕使用GCC构建Boost Library Binary,在CLion中配置项目以及使用CMake进行。这是相当有表现力的,甚至可能是一个过大的杀伤力,但是我相信你可以适应。另一方面,我将尝试使项目本身尽可能与系统无关。

配置:

  • 操作系统:Windows 8.1
  • CLion:2018.2.4
  • 提升:1.68.0
  • 编译器:GCC-6.3.0(由MinGW提供)

MinGW是根据its instructionsJetBrains's suggestions配置的。 (如果重要的话,我下载了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. 在Boost根(\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"
    4. 下创建b2.exe。
    5. 移动命令提示符以增强根(cd "D:\SDK\boost\boost_1_68_0"
    6. (您可以考虑使用"D:\SDK\boost\1_68_0\build\bin\b2.exe --show-directories"。值得在以下命令中指定要构建的库(--with-library-name),因为此步骤可能需要一些时间。)运行{{1} }。它在"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

CMake在库文件夹中查找具有特定名称的文件,因此请确保(复制和)更改其中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 个文件之一的名称。对于此示例,我将.a更改为libboost_regex-mgw63-mt-x32-1_68.a

创建CLion项目

创建一个新项目(在本示例中,其名称为boost_regex.a)并将内容放入main.cpp (6)

CLionBoostRegex

配置CLion

转到(在Windows上)#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; } } ,然后在File -> Settings -> Build, Execution, Deployment -> CMake中用CMake options添加到Boost根目录的路径,即-DBOOST_ROOT=。如果包含构建库的目录位于Boost根目录之外,请使用-DBOOST_ROOT="D:\SDK\boost\boost_1_68_0"添加它,即:-DBOOST_LIBRARYDIR=。命令之间用空格分隔。

确定是否要静态或动态链接。

选项1:静态链接

对于静态链接,您的CMakeLists.txt应该如下所示:

-DBOOST_LIBRARYDIR="D:\SDK\boost\1_68_0\stageDir\lib"

选项2:动态链接

对于静态链接,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}) 行。

构建项目后,请确保将target_link_libraries(CLionBoostRegex -static)库复制到具有可执行文件(.dll的目录中,以及 libboost_regex-mgw63-mt-x32-1_68.dlllibstdc++-6.dll目录中的目录( MinGW\bin)(考虑将CMakeLists.txt中的D:\SDK\MinGW\bin行包括在中,将target_link_libraries(CLionBoostRegex -static-libstdc++)添加到-DCMAKE_CXX_FLAGS="-static-libstdc++"中)

运行程序(6.4)

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

    jayne.txt
  3. 在那里打开命令提示符
  4. 运行To: George Shmidlap From: Rita Marlowe Subject: Will Success Spoil Rock Hunter? --- See subject.
  5. 程序应输出CLionBoostRegex.exe < jayne.txt,如教程所示。

注释

更改Will Success Spoil Rock Hunter?库的名称并选择.a链接之后的工作量最少-您不必以更大的可执行文件大小来复制任何其他库。如果可执行文件的大小更为重要,则可以在Boost库目录中更改-static库的名称,然后为.dll复制丢失的.dll(即:.exe和{ {1}}。

您可以在CMakeLists.txt libboost_regex-mgw63-mt-x32-1_68.dlllibstdc++-6.dll中加入set(Boost_DEBUG ON)行,以获取一些宝贵的信息。

我用其他问题来写这篇文章,最著名的是:1234

答案 2 :(得分:0)

  1. 首先你必须get started with boost。由于boost.asio不是仅限标头的库,因此您必须确保该库正确build

  2. 然后,您必须配置CLion以获取标头和库的正确路径。可以在此SO question找到第二个问题的解决方案。