【发布时间】:2019-09-13 09:55:39
【问题描述】:
所以我试图在 QtCreator 4.8.1 中创建一个新的 C++17 cmake 项目,但遇到了一个小问题。看来我正在使用正确的链接器和编译器,但我必须在某处缺少一个设置,因为我完成的(小)项目不会构建。
g++-9 不在 Ubuntu 中,所以我做的第一件事就是安装它(还有 gcc-9)。然后我创建了一个新工具包并将 C/C++ 编译器更改为那个工具包。我没有对其进行其他更改。
#include <iostream>
#include <vector>
#include <algorithm>
#include <execution>
using namespace std;
int main()
{
std::cout << __cplusplus << std::endl;
std::vector<int> vec ={3, 2, 1, 4, 5, 6, 10, 8, 9, 4};
std::sort(vec.begin(), vec.end()); // sequential as ever
std::sort(std::execution::seq, vec.begin(), vec.end()); // sequential
std::sort(std::execution::par, vec.begin(), vec.end()); // parallel
std::sort(std::execution::par_unseq, vec.begin(), vec.end()); // parallel and vectorized
return 0;
}
虽然我可以按照标题进入正确的更新版本,但构建系统仍然抱怨 std::execution::seq 不存在(并且 __cplusplus 似乎一直指向 2014 年的版本)
编辑:我尝试通过将 set(CMAKE_CXX_STANDARD 17) 添加到我的 cmake 文件中来遵循类似问题中的建议,但现在我得到了
In file included from /usr/include/c++/9/pstl/parallel_backend.h:14,
from /usr/include/c++/9/pstl/algorithm_impl.h:25,
from /usr/include/c++/9/pstl/glue_execution_defs.h:52,
from /usr/include/c++/9/execution:32,
from /home/pedro/LockLessDt/main.cpp:4:
/usr/include/c++/9/pstl/parallel_backend_tbb.h:19:10: fatal error: tbb/blocked_range.h: No such file or directory
| ^~~~~~~~~~~~~~~~~~~~~
这听起来像是执行标头的问题。
__cplusplus 现在指向正确的值。
这是我的 cmake 文件
cmake_minimum_required(VERSION 2.8)
project(LockLessDt)
set(CMAKE_CXX_STANDARD 17)
add_executable(${PROJECT_NAME} "main.cpp")
【问题讨论】:
-
您是否在编译器选项中明确指定
-std=c++17标志?我目前正在使用g++9.2.1,使用的默认标准似乎是c++14。 -
重要的是
Qt的版本,而不是Qt Creator的版本。是的,当然是重复的。 -
@Fareanor 我认为在这种情况下
Qt和Qt Creator版本都无关紧要。从描述来看,似乎可以归结为“如何在我的 CMake 项目中启用 C++17 功能”。