使用 cmake 和 travis 提升 1.67 静态库

Posted

技术标签:

【中文标题】使用 cmake 和 travis 提升 1.67 静态库【英文标题】:Boost 1.67 static library with cmake and travis 【发布时间】:2019-03-23 14:29:57 【问题描述】:

大家好。 我尝试使用 cmake 构建我的 c++ 项目并在 travis-ci 中提升 1.67。 以下是源文件。

在我的 linux 计算机上安装了源代码的 cmake 3.13.4 和源代码的 boost-1.67,所有库(静态和动态)都在目录“/usr/local/lib/”中,一切正常.但在 travis-ci 中,我每次都会看到这条消息:

Unable to find the requested Boost libraries.
  Boost version: 1.67.0
  Boost include path: /usr/include
  Could not find the following static Boost libraries:
          boost_program_options
  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.

yml 文件:

language: cpp
dist: xenial
sudo: false
os: linux


matrix:
  include:
    - env: COMPILER=g++-8 BUILD=Debug STANDARD=14
      compiler: gcc
      addons:
        apt:
          update: true
          sources:
            - sourceline: 'ppa:mhier/libboost-latest'
            - ubuntu-toolchain-r-test
          packages:
            - g++-8
            - boost1.67
    - env: COMPILER=g++-8 BUILD=Release STANDARD=14
      compiler: gcc
      addons:
        apt:
          update: true
          sources:
            - sourceline: 'ppa:mhier/libboost-latest'
            - ubuntu-toolchain-r-test
          packages:
            - g++-8
            - boost1.67

before_script:
  - wget https://cmake.org/files/v3.13/cmake-3.13.4-Linux-x86_64.sh
  - sudo sh cmake-3.13.4-Linux-x86_64.sh -- --skip-license --prefix=/usr

script:
  - cmake .
  - cmake --build .
  - cmake --build . --target package

制作:

cmake_minimum_required(VERSION 3.10)  
project(hcch VERSION 0.1.$VERSION_BUILD)

set(BOOST_ROOT /usr/include/boost/)

# For my linux
#set(BOOST_LIBRARYDIR /usr/local/lib)

# For travis-ci host
set(BOOST_LIBRARYDIR /usr/lib/x86_64-linux-gnu)

set(Boost_USE_STATIC_LIBS ON)
include_directories ($Boost_INCLUDE_DIRS)
link_directories ($Boost_LIBRARY_DIRS)

find_package(Boost 1.67 COMPONENTS program_options REQUIRED)
find_package(LLVM REQUIRED CONFIG)

configure_file (
        "$PROJECT_SOURCE_DIR/version.h.in"
        "$PROJECT_BINARY_DIR/version.h"
)

set(CMAKE_CXX_STANDARD 14)

add_executable(hcch hcch.cpp SourcesCreator.cpp SourcesCreator.h)

set_target_properties(hcch PROPERTIES
        CXX_STANDARD 14
        CXX_STANDARD_REQUIRED ON
        COMPILE_OPTIONS -Wpedantic -Wall -Wextra
        )

TARGET_LINK_LIBRARIES( hcch $BOOST_LIBRARYDIR/libboost_program_options.a )

也许静态库不是从 ppa:mhier/libboost-latest 安装的? 如果有人遇到,请告诉我如何解决。

这是我的项目https://github.com/angelskieglazki/hcch 问候,最大

【问题讨论】:

【参考方案1】:

我可以确认,从 ppa:mhier/libboost-latest 构建的 libboost 目前不构建静态库,仅共享。

如果您必须使用比 libboost-all-dev 提供的版本更高的 Boost 版本,那么您将需要从源代码编译 boost,尽管您将面临超时的风险。这方面的说明可以在Boost's best practice handbook 中找到。

【讨论】:

以上是关于使用 cmake 和 travis 提升 1.67 静态库的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake 和提升的小部件编译 qt gui 时出错

在向项目添加提升时CMake和/或出错

本地构建工作正常时没有这样的文件或目录

boost 1.67编译VS2017版本

cmake 在自定义位置或库存位置找不到提升

CMake 找不到提升。