Boost 编译及codeblocks 配置boost
由于更换笔记本电脑,且需要使用C++11 并生成新文件夹,需要使用一个cpp程序生成文件夹。
Ps: 个人习惯使用codeblocks来管理小工具和轻量级代码。
主要涉及boost代码段如下
//in File xxx.cpp
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
string op_path = "./boundaryData_fluc/" + to_string(1.4863*1e-5*i);
path bop_path(op_path);
string op_file = "/U";
if (!exists(op_path))
{
create_directories(bop_path);
std::cout << "Create directories :" << op_path << '\n';
}
可见,主要涉及boost的filesystem这个库及其头文件。
预配置:
操作系统: windows 11
codelocks版本 : 20.03,带MingW 编译器版本;
boost库版本: 1.86.0;
其链接分别如下;
- https://www.codeblocks.org/
- https://www.boost.org/users/history/version_1_86_0.html
需要说明的是,我之前本打算使用boost的预编译版本作为链接库,但发现预编译版本为msvc版本,与visual code编辑器似乎有所绑定。链接库时我代码仍然找不到库,显示Undefined reference to xxx。 因此后续使用gcc编译boost,并使用codeblocks配置链接,程序编译成果,详细步骤如下:
S1: 使用gcc编译boost库
windows11里较为好用的gcc编译器有clang 和mingw,这里保持和codeblocks一致,选择Mingw
- 需要提前确认是否gcc已经在windows环境内适用。
在powershell内可输入
gcc -v
其正常会显示其路径等信息。
Using built-in specs.
COLLECT_GCC=C:\Program Files\CodeBlocks\MinGW\bin\gcc.exe
如若不然,检查mingw是否添加到环境变量。
使用win + R
后输入sysdm.cpl
, 点击“高级”-> “环境变量;”。双击 用户变量(推荐,也可添加到系统变量)的 Path
这一行,然后点击添加,将 Mingw的 \bin
路径信息告诉系统。
如以下路径所示,添加后记得确定。
C:\Program Files\CodeBlocks\MinGW\bin
- 在确认gcc环境后,进入boost文件夹内,(和bootstrap.bat 同级的文件夹,右键在此目录打开powershell, 运行脚本
.\bootstrap.bat gcc
运行后会生成b2.exe
程序。
可以使用 b2 --help
查看编译的一些配置,由于不是本文重点,此处选择默认执行b2
.\b2
编译会有半小时左右。
编译好后会显示哪些target已经update,我这里有些多线程的库没有编译成功,新主机,mpi啥的我还没有配置,但是不影响filesystem
库即可。
如果选择默认执行b2
, 编译好的库会在\stage\lib
这个新路径内。
S2 codeblocks 配置 boost库
打开codeblocks IDE,
- 点击
Settings
->Compiler setting
->Search directories
->Compiler
->Add
添加bootstrap.bat 同级路径:
例如:
C:\local\cppLibs\boost_1_86_0\boost_1_86_0\
- 点击
Settings
->Compiler setting
->Search directories
->Linker
->Add
添加编译好的boost库路径:
例如:
C:\local\cppLibs\boost_1_86_0\boost_1_86_0\stage\lib
- (针对本代码段所需filesystem库)
告诉代码段链接库位置
点击Settings
->Compiler setting
->Linker settings
->Link libraries
->Add
C:\local\cppLibs\boost_1_86_0\boost_1_86_0\stage\lib\libboost_filesystem-mgw8-mt-d-x64-1_86.a
以上三点都配置好,其实等同于命令行如下执行:
g++.exe -IC:\local\cppLibs\boost_1_86_0\boost_1_86_0 -c xxx.cpp -o xxx.o
g++.exe -LC:\local\cppLibs\boost_1_86_0\boost_1_86_0\stage\lib -o xxx.exe xxx.o C:\local\cppLibs\boost_1_86_0\boost_1_86_0\stage\lib\libboost_filesystem-mgw8-mt-d-x64-1_86.a
这里xxx.cpp
为执行代码段。