【问题标题】:AppleLLVM 9.1.0 with c++17 support? or was it a cmake/env issue?支持 c++17 的 AppleLLVM 9.1.0?还是 cmake/env 问题?
【发布时间】:2018-04-24 06:26:09
【问题描述】:

我一直在使用 AppleLLVM 9.1.0(clang-902.0.39.1) 开发 os X 10.13,示例如下

#include <experimental/optional>
#include <iostream>

template<typename T>
class p {
  public:
  T value;
  p(T& t):value(t){}
  p(T const& t):value(t){}
  ~p() = default;
};
template <typename T1, typename T2>
constexpr auto operator+(p<T1> const &lhs, p<T2> const &rhs) noexcept {
  return p<decltype(lhs.value + rhs.value)>(lhs.value + rhs.value);
}
int main(int, char* []) {
  p<int> v1(20);
  p<int> v2(10);
  auto v3 = v1+v2;
  std::cout << v3.value <<std::endl;
  return 0;
}

编译
c++ -std=c++17 -o test test.cpp

它非常适合我只是尝试使用N3638 中提到的返回类型推导的新功能,它提出了一种书面风格

template<typename T> auto f(T t);

但是,当我即将在我的 CMake(3.11.1) 组织项目中使用它时,几个标志显示如下:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-Wall -fpermissive -Wno-unused-parameter -Werror")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb3")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ggdb3 -DNDEBUG")

编译失败,告诉我“'auto' return without trailing return type; deduced return types are a C++14 extension”。 我尝试了下一个标志也得到了相同的结果:

set(CMAKE_CXX_FLAGS "-std=c++17")

它看起来很像环境设置失败的 CMake 问题,而我对我应该设置哪些 CMake 标志来启用这个新功能感到困惑?还是编译器相关的问题?

【问题讨论】:

  • (顺便说一句,“extensions off”和“-fpermissive”的组合没有意义)
  • @MarcGlisse 在问题中:CMake 3.11.1
  • 你能看到cmake正在运行的编译器命令吗?如果你的生成器是make,你可以写make VERBOSE=1,如果是ninja,你可以写ninja -v(我想)。我实际上不知道其他生成器
  • 使用 gcc 或 clang 和 cmake-3.10.2 在 linux 上为我工作(我得到 -std=c++1z)。
  • @Justin 我已经导出了 env 变量和编译器设置为 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++,它链接到 clang 和最后它的版本正是我所描述的——Apple LLVM 版本 9.1.0 (clang-902.0.39.1)。

标签: c++ cmake


【解决方案1】:

对不起,伙计们。

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

工作得很好。 该问题是由旧版本依赖库引起的,该依赖库在 c++11 中不推荐使用“std::auto_ptr”并在 c++17 中删除(但仍可在 c++11 中编译),因此 CMakeLists 专用于 c+ +11 标准。 问题解决了。 在我的 ubuntu 环境中,旧版本库由 apt-get 更新。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2013-07-15
    • 2019-07-16
    • 2017-02-24
    • 2022-06-27
    • 1970-01-01
    相关资源
    最近更新 更多