c++ - 如何在 Travis CI 上使用 C++17 安装 clang?

标签 c++ travis-ci c++17 clang++

我正在尝试使用 clang 4.0 设置 Trevis CI。我需要 C++17 支持。我使用以下脚本:

language: cpp
sudo: required

os:
    - linux

compiler:
    - clang

env:
    - TARGET_CPU=x86 BUILD_CONFIGURATION=Debug
    - TARGET_CPU=x86 BUILD_CONFIGURATION=Release
    - TARGET_CPU=x64 BUILD_CONFIGURATION=Debug
    - TARGET_CPU=x64 BUILD_CONFIGURATION=Release
    - TARGET_CPU=amd64 BUILD_CONFIGURATION=Debug
    - TARGET_CPU=amd64 BUILD_CONFIGURATION=Release

before_install:  
  - sudo apt-add-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main"
  - sudo apt-get update -qq

install: 
  - sudo apt-get install libboost-all-dev
  - sudo apt-get install --allow-unauthenticated -qq clang++-4.0
  - export CXX="clang++-4.0"

script:
    - mkdir build
    - cd build
    - cmake .. -DTARGET_CPU=$TARGET_CPU -DCMAKE_BUILD_TYPE=$BUILD_CONFIGURATION
    - make

尽管 clang 4.0 已成功安装 build失败并显示消息:错误:命名空间“std”中没有名为“make_unique”的成员。这意味着我什至没有 C++11 支持。 我该如何解决?我是否遗漏了 travis.yml 中的某些内容?

最佳答案

您的 Clang 版本应该没问题,问题是(根据我的经验)Travis 不遵守各种 CMake 配置。出于某种原因,根据我的经验,Travis CI 似乎忽略了 CMake 中的 CMAKE_CXX_STANDARD 变量。

例如,Travis 将忽略我的 CMakeLists.txt 中的以下行(对于 C++11)。

set(CMAKE_CXX_STANDARD 11)
set(CXX_STANDARD TRUE)

如果我手动添加标志,我可以获得成功的构建:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

对于 C++17,您想将其更改为 set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z").

在我看来,这些都不是理想的,但它是一种可用的解决方法。

关于c++ - 如何在 Travis CI 上使用 C++17 安装 clang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45226709/

相关文章:

c++ - 带有 g++ 5.4.0 的 asan 无法在 travis CI 上运行

C++ SFINAE 部分特化

c++ - 堆上有大对象不好吗?

c++ - 将 1 到 32 位数字附加到 char 缓冲区

c# - 如何使用 Travis CI 构建混合 (C++ + C#) 解决方案?

travis-ci - 重命名 repo 破坏了 travis

c++ - 链接使用不同版本的 GCC 构建的目标文件

c++ - CMake 只接受 add_subdirectory 中的 `find_package(Qt5Widgets REQUIRED)`,而不是根项目

c++ - 如何模拟模板别名的推导指南?

c++ - C++推导的返回类型在定义之前不能使用