终端clang++编译C++代码成功,Makefile编译报std::async不存在错误
问题原因及解决方法
问题根源
你遇到的编译错误是因为Makefile中命令行的缩进使用了空格而非Tab键,导致make没有执行你写的clang++ -Wall -g -std=c++11 main.cpp命令,而是触发了make的默认C++编译规则,默认执行的命令是:
c++ main.cpp -o main
这个默认命令没有添加-std=c++11参数,编译器会以C98标准编译代码,而auto类型推导、std::async都是C11才引入的特性,因此会出现编译错误和警告。
解决方法
修改你的Makefile,将命令行前的空格替换为Tab键,确保规则内的命令行以Tab开头。同时建议加上-o main参数,让编译输出的可执行文件和make目标名一致,修改后的Makefile如下:
main: main.cpp clang++ -Wall -g -std=c++11 main.cpp -o main
(注:上述代码中clang++行开头是Tab,不是空格)
内容的提问来源于stack exchange,提问作者shubhcodegate
相关产品推荐
相关产品推荐

