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:
小智 8
以下是使用 Boost 正则表达式库的 CLion 示例项目。它引用了本教程。
目标:使用 CLion 创建处理 jayne.txt 的 .exe,如 Boost 教程中所示。
我的示例围绕使用 GCC 构建 Boost 库二进制文件、在 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...
Run Code Online (Sandbox Code Playgroud)
我保持 Boost root 不变——我没有创建任何其他目录。这将 Boost 源与创建的工具和库分开,因此我可以展示如何显式指定这些目录。
我决定使用 GCC 从源代码构建库。
"D:\SDK\boost\boost_1_68_0");构建库(5.2):
\tools\build打开Boost root 的命令提示符( "D:\SDK\boost\boost_1_68_0\tools\build")bootstrap.batb2 install --prefix="D:\SDK\boost\1_68_0\build" --toolset=gcc-6.3.0。这将在下创建 b2.exe"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"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.
创建一个新项目(在本例中其名称为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)
转到(在 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"。命令以空格分隔。
决定是否需要静态链接或动态链接。
对于静态链接,您的 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)
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
cmake-build-debug\使用默认配置创建目录)(如果您选择动态链接,请确保添加必要的.dll)在可执行文件的目录中创建jayne.txt包含以下内容的文件:
To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.
Run Code Online (Sandbox Code Playgroud)CLionBoostRegex.exe < jayne.txtWill 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。
我使用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++项目中?
| 归档时间: |
|
| 查看次数: |
13886 次 |
| 最近记录: |