文章目录
  1. 1. 一、boost库编译
  2. 2. 二、CLion配置

前几天编译boost1.65.1版本,遇到一些问题,主要是与环境和版本有关系,如果不知道这些细节,很难找出问题。这里记录一下。

一、boost库编译

在windows下编译boost库可以参照这里:https://gist.github.com/sim642/29caef3cc8afaa273ce6 ,整个过程配置都可以按照上面来,但是要注意下最新版本的MinGW,同时还要注意是64位的还是32位的。

因使用的boost版本是目前最新版本的,所以要求内置gcc编译器的MinGW也要是最新版本的,否则在执行b2命令设置toolset=gcc时,会提示找不到gcc。另外还要注意系统是32位还是64位,对应的gcc也要相同的版本。

如果中间编译遇到如下问题:

1
For MinGW make to work correctly sh.exe must NOT be in your path.

解决办法是,先保证MinGW的环境变量配置正确,然后关闭命令行,重新执行编译命令。如果还提示这个错误,找到环境变量中Git的bin目录,把这个环境配置删除。原因是Git配置的环境变量中的sh.exeMinGW中的sh.exe冲突,去掉Git的即可。

二、CLion配置

因为CLion使用的是CMake编译,所以需要配置CMakeList.txt文件。使用目前最新版本2017.2版本时,默认使用的CMake版本是3.8,而CMake的官方网站上最新的版本已经是3.10了。这段文字一直在强调一个–版本,所以这里的版本很重要,原因是如果配置都OK,会提示下面的错误:

1
Imported targets not available for Boost version

这个时候就要考虑换CMake版本了,下面是在stackoverflow上面找到的boost库与CMake版本的对应关系:

1
2
3
Boost 1.63 requires CMake 3.7 or newer
Boost 1.64 requires CMake 3.8 or newer
Boost 1.65 and 1.65.1 require CMake 3.9.3 or newer

参见这里:https://stackoverflow.com/questions/42123509/cmake-finds-boost-but-the-imported-targets-not-available-for-boost-version

所以需要修改CLion的默认CMake的版本,从CMake的官网上下载最新的CMake,然后安装,然后在设置的Build, Excutation, Deployment中的第一个ToolChains中设置CMake的版本。但是,但是使用CMake executableCustom选择最新版本的CMake路径无效。下面的CMake不提示版本,显示无效。目测是CLion的bug,解决办法是找到CLion的安装目录,然后将cmake目录下面的内容复制一份备份,然后把最新CMake安装目录下面的对应内容替换CLion安装目录下面的cmake里面的内容。然后再切回Bundled Cmake就可以使用最新版本了。

下面附一份CMakeList.txt的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cmake_minimum_required(VERSION 3.9)
project(cppDemo)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -static-libgcc -static-libstdc++")

set(SOURCE_FILES main.cpp digital_converter.h digital_converter.cpp)


add_executable(cppDemo ${SOURCE_FILES})

if (WIN32)

set(BOOST_ROOT "D:/programs/boost_1_65_1/boost")
set(Boost_INCLUDE_DIR, ${BOOST_ROOT}/include/boost-1_65_1)
set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_VERSION 106501)
set(Boost_COMPILER "-mgw72") # 注意这里是编译后的boost库中包含的字符串,72是MinGW的版本号,根据自己的版本修改,看下自己编译出来的库的名称就知道了

MESSAGE(STATUS "boost root dir: " : ${BOOST_LIBRARYDIR})

find_package(Boost 1.65.1 REQUIRED COMPONENTS
filesystem) # 注意windows下面编译出来的boost库名称中间都有-mgw72,所以需要在前面指定,不然这里提示找不到filesystem
add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})

include_directories(${Boost_INCLUDE_DIR})

target_link_libraries(cppDemo ${Boost_LIBRARIES})

endif (WIN32)

看来C++使用CLion工具的人比较少,估计都是在windows下面用VC了。但感觉VS太大了,不想装,所以选择CLion。用这些小众的工具,遇到问题都不好查资料,需要自己一点点的摸索,以后还不知道会遇到什么问题。

以上。

文章目录
  1. 1. 一、boost库编译
  2. 2. 二、CLion配置