首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装odeint和boost

安装odeint和boost
EN

Stack Overflow用户
提问于 2016-06-23 07:44:57
回答 2查看 1.2K关注 0票数 1

我在编程方面真的是经验不足。我在安装odeint (和boost)来解微分方程系统时遇到了麻烦。我已经看了很多关于安装boost的问题,我尝试了很多,但我还不能使用odeint。我正在使用Mac Yosemite 10.10.5,下面是我的问题,非常感谢你的帮助:

1,如果我可以成功安装boost,那么当我想使用odeint时,我是否只需要将#include<boost/odeint/optionalSubdirectories>作为我的文件头?我弄糊涂了,因为在odeint webpage上,有可供下载的文件,其中包括示例。我想知道在我下载boost之后,我是否必须下载这些文件才能使odeint工作?如果是,我应该把从odeint网页下载的文件放在哪里?

2 .在boost's installing instructions中,他们说第二步(下载后)是在我想要安装Boost的目录中执行tar --bzip2 -xf /path/to/boost_1_61_0.tar.bz2。哪里是放置Boost安装的好地方?这样做之后,我可以开始在我的c++项目中包含头文件了吗?或者,在odeint真正工作之前,我还需要做一些其他的事情吗?

3,当我编译我的文件时(在写完解微分方程的代码之后),我需要用boost或odeint做些什么,还是像往常一样编译我的文件?

如果我的问题听起来很愚蠢,我很抱歉。正如我所提到的,我缺乏经验。我真心希望您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2016-07-11 00:59:04

odeint只是一些头文件。下载它并包含头文件的路径。假设你已经安装了boost库。就这样。

票数 1
EN

Stack Overflow用户

发布于 2020-02-12 07:39:48

我直接使用boost github repository中的源代码为我的项目安装boost。这样做,我可以确保所有使用相同源代码以及库和头文件的开发人员都可以直接使用(不需要安装到操作系统中)。

因此,我创建了一个小bash脚本,用于下载、构建和安装boost:

./cmake/SetupBoost.sh

代码语言:javascript
复制
#!/bin/bash

NO_OF_CORES_TO_USE=$(($(nproc --all)-1))

echo "   > collect boost setup information"
if [ $# -eq 1 ]
then
    echo "arguments supplied"
    BOOST_ROOT_DIR=$1
    BOOST_VERSION="latest"
elif [ $# -eq 2 ]
then
    BOOST_ROOT_DIR=$1
    BOOST_VERSION=$2
else
    echo "warning"
    exit -1
fi

BOOST_SOURCE_DIR="${BOOST_ROOT_DIR}/source"

if [ -d "${BOOST_SOURCE_DIR}/.git" ]; then
    echo "   > repository already exist - checkout"
    cd ${BOOST_SOURCE_DIR} && \
        git checkout tags/${BOOST_VERSION}
else
    echo "   > repository do not exist - clone"
    git clone \
        --branch ${BOOST_VERSION} \
        --recurse-submodules \
        -j${NO_OF_CORES_TO_USE} \
        https://github.com/boostorg/boost.git \
        ${BOOST_SOURCE_DIR}
fi

echo "   > perform bootstrap"
cd ${BOOST_SOURCE_DIR} && ./bootstrap.sh

echo "   > build and install boost libraries"
cd ${BOOST_SOURCE_DIR} && ./b2 \
    link=static \
    runtime-link=static \
    install \
    --prefix=${BOOST_ROOT_DIR} \
    -j${NO_OF_CORES_TO_USE}

其中可以像这样调用脚本:

代码语言:javascript
复制
./SetupBoost.sh <installDir> [version-tag]

现在,我可以将这个脚本作为CMake-target调用到CMake中(我喜欢将boost源代码、头文件和库放入./extern/boost/):

./cmake/SetupBoost.cmake

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.14)

set(BOOST_VERSION "boost-1.70.0")

set(BOOST_ROOT_DIR    ${EXTERN_ROOT_DIR}/boost)
set(BOOST_SOURCE_DIR  ${BOOST_ROOT_DIR}/source)
set(BOOST_LIBRARY_DIR ${BOOST_ROOT_DIR}/lib)
set(BOOST_INCLUDE_DIR ${BOOST_ROOT_DIR}/include)

### build boost sources ########################################################

add_custom_command(
    OUTPUT
        ${BOOST_INCLUDE_DIR}
        ${BOOST_ROOT_DIR}
    COMMAND
        bash ${PROJECT_SOURCE_DIR}/cmake/SetupBoost.sh ${BOOST_ROOT_DIR} ${BOOST_VERSION}
    WORKING_DIRECTORY
        ${PROJECT_SOURCE_DIR}
)

add_custom_target(
    boost_library
    DEPENDS
        ${BOOST_INCLUDE_DIR}
        ${BOOST_ROOT_DIR}
)

现在我将这两行添加到main ./CMakeLists.txt

代码语言:javascript
复制
set(EXTERN_ROOT_DIR ${PROJECT_SOURCE_DIR}/extern)
include(cmake/SetupBoost.cmake)

我的应用程序对应的./app/CMakeLists.txt现在看起来如下所示:

代码语言:javascript
复制
add_executable( ${PROJECT_NAME}
    app.cpp
)

add_dependencies( ${PROJECT_NAME}
    boost_library
)

target_include_directories( ${PROJECT_NAME} PRIVATE
    ${BOOST_INCLUDE_DIR}
)

对应的源文件app/app.cpp可以这样使用头部:

代码语言:javascript
复制
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/math/special_functions/gamma.hpp>

// your code goes here
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37979987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档