關於 boost 在 Windows 下的使用 gcc 安裝與 CLion 的配置, 能夠查到的英文資料都比較少, 踩過坑后記錄一下.
MinGW 安裝 Boost
下載並解壓 Boost 文件夾到一個穩定的文件夾, 此時我的文件名為 boost_1_69_0.
在進行以下幾步之前請先把 gcc 添加至環境變量.
在該文件夾目錄下打開命令行, 首先執行:
bootstrap gcc
如果你只安裝指定的少數幾個庫, 可以使用:
b2 --show-libraries
得到你可以在這里單獨安裝的所有庫的名稱. 然后你可以安裝指定的某個庫, 如 program_options 和 filesystem:
b2 toolset=gcc --with-program_options --with-filesystem
或者你想一次性編譯完畢, 以后就無需再進行編譯:
b2 toolset=gcc
以上的指令復制至 cmd 可直接執行
全部編譯完成的時間視處理器性能而定, 大概在十分鍾左右.
此時你可以在 boost 根目錄下的 stage/lib
文件夾下看到以 a 為文件擴展名的靜態庫.
CLion CMakeLists 配置 Boost
網上搜索到的教程容易導致以下幾個誤區
- 認為鏈接庫的文件夾目錄在 bootstrap_1_69_0/libs 下
- 無法找到原因為什么無法成功 find_package
在 Boost 的配置中, 需要指明 BOOST_ROOT, BOOST_INCLUDEDIR, BOOST_LIBRARYDIR 這三個變量. 我的 boost 文件夾放在 C:/Local
:
set(Boost_DEBUG on) set(Boost_DETAILED_FAILURE_MSG ON) #查看 Boost 配置問題所在 set(BOOST_ROOT C:/Local/Boost_1_69_0) set(BOOST_INCLUDEDIR ${BOOST_ROOT}) set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib) find_package(Boost COMPONENTS REQUIRED program_options)
提示 find_package 失敗.
查看 debug 信息:
-- [ .../FindBoost.cmake:1809 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-mgw51-mt-1_69;boost_program_options-mgw51-mt;boost_program_options-mt-1_69;boost_program_options-mt;boost_program_options-mt;boost_program_options -- [ .../FindBoost.cmake:1862 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: boost_program_options-mgw51-mt-d-1_69;boost_program_options-mgw51-mt-d;boost_program_options-mt-d-1_69;boost_program_options-mt-d;boost_program_options-mt;boost_program_options
此時對照 stage/lib
文件夾下的文件名, 發現名稱為libboost_program_options-mgw51-mt-d-x64-1_69.a
或libboost_program_options-mgw51-mt-d-x32-1_69.a
因此, 只需將 x64 文件中的文件名刪掉 “-x64” 即可.
故在 stage
文件夾下新建一個 python3 重命名文件腳本:
# -*- coding: utf-8 -*- # renamer.py from os import listdir, rename import re for filename in listdir('lib'): new_filename = re.sub('libboost(.*)-x64(.*).a', r'libboost\1\2.a', filename) rename('lib/' + filename, 'lib/' + new_filename)
執行后再次進行 cmake, 就可以成功 find_package
此時按照網上教程, 完整的 CMakeLists.txt 為:
cmake_minimum_required(VERSION 3.13) project(dot) set(CMAKE_CXX_STANDARD 14) set(Boost_DETAILED_FAILURE_MSG ON) set(Boost_DEBUG on) set(BOOST_ROOT C:/Local/Boost_1_69_0) set(BOOST_INCLUDEDIR ${BOOST_ROOT}) set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib) find_package(Boost COMPONENTS REQUIRED filesystem program_options) add_executable(dot main.cpp command.h) include_directories(${BOOST_ROOT}) target_link_libraries(dot ${Boost_LIBRARIES}) #Boost_LIBRARIES 為 find_package 自動生成的變量
CLion 配置 Boost 完成.
參考資料
bat腳本根據mingw版本判斷是否可編譯32/64位程序(編譯時mingw位數需要與系統對應)
https://inhzus.com/posts/2019-02-12-setup-boost-in-clion-on-windows/