如何在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
:
答案 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进行。这是相当有表现力的,甚至可能是一个过大的杀伤力,但是我相信你可以适应。另一方面,我将尝试使项目本身尽可能与系统无关。
配置:
MinGW是根据its instructions和JetBrains'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源与创建的工具和库分开,因此我可以展示如何显式指定这些目录。
我决定使用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"
cd "D:\SDK\boost\boost_1_68_0"
)(您可以考虑使用"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
。
创建一个新项目(在本示例中,其名称为boost_regex.a
)并将内容放入main.cpp (6):
CLionBoostRegex
转到(在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=
。命令之间用空格分隔。
确定是否要静态或动态链接。
对于静态链接,您的CMakeLists.txt应该如下所示:
-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})
行。
构建项目后,请确保将target_link_libraries(CLionBoostRegex -static)
库复制到具有可执行文件(.dll
的目录中,以及 libboost_regex-mgw63-mt-x32-1_68.dll
从libstdc++-6.dll
目录中的目录( MinGW\bin
)(或考虑将CMakeLists.txt中的D:\SDK\MinGW\bin
行包括在或中,将target_link_libraries(CLionBoostRegex -static-libstdc++)
添加到-DCMAKE_CXX_FLAGS="-static-libstdc++"
中)
CMake options
目录)(如果您选择了动态链接,请确保添加必要的cmake-build-debug\
s)在具有可执行文件的目录中,创建.dll
文件,其内容如下:
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
链接之后的工作量最少-您不必以更大的可执行文件大小来复制任何其他库。如果可执行文件的大小更为重要,则可以在Boost库目录中更改-static
库的名称,然后为.dll
复制丢失的.dll
(即:.exe
和{ {1}}。
您可以在CMakeLists.txt 或 libboost_regex-mgw63-mt-x32-1_68.dll
至libstdc++-6.dll
中加入set(Boost_DEBUG ON)
行,以获取一些宝贵的信息。
答案 2 :(得分:0)
首先你必须get started with boost。由于boost.asio
不是仅限标头的库,因此您必须确保该库正确build。
然后,您必须配置CLion以获取标头和库的正确路径。可以在此SO question找到第二个问题的解决方案。