Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:没有这样的文件或目录:'–;std=c++;11';编译makefile之后_C++_C++11_Compilation_Makefile - Fatal编程技术网

C++ 错误:没有这样的文件或目录:'–;std=c++;11';编译makefile之后

C++ 错误:没有这样的文件或目录:'–;std=c++;11';编译makefile之后,c++,c++11,compilation,makefile,C++,C++11,Compilation,Makefile,当我在终端中使用make进行编译时,它会打印: g++-Wall–std=c++11-c File.cpp 叮当声:错误:没有这样的文件或目录:'-std=c++11' make:**[Book.o]错误1 生成文件: PROG=螺柱 CC=g++ OBJS=File.o FileTestDriver.o CPPFLAGS=-Wall–std=c++11 $(进度):$(OBJS) $(CC)-o$(PROG)$(OBJS) File.o:File.h $(CC)$(CPPFLAGS)-c F

当我在终端中使用
make
进行编译时,它会打印:

g++-Wall–std=c++11-c File.cpp
叮当声:错误:没有这样的文件或目录:'-std=c++11'
make:**[Book.o]错误1
生成文件:

PROG=螺柱
CC=g++
OBJS=File.o FileTestDriver.o
CPPFLAGS=-Wall–std=c++11
$(进度):$(OBJS)
$(CC)-o$(PROG)$(OBJS)
File.o:File.h
$(CC)$(CPPFLAGS)-c File.cpp
FileTestDriver.o:
$(CC)$(CPPFLAGS)-c FileTestDriver.cpp
清洁:
$(RM)$(PROG)$(OBJS)
FileTestDriver具有主函数,File.cpp只是一个简单的类,包含一些构造函数、实例变量和函数。我不确定问题出在哪里,但我假设它在Makefile中,因为我今天才开始使用它们

当我简单地编译
g++-std=c++11 File.cpp时,我得到了错误:

架构x86_64的未定义符号: “_main”,引用自: 主可执行文件的隐式输入/启动 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
但是我假设错误是因为它有一个
.h
,需要编译makefile。不管怎么说,我不确定我做错了什么,但我感谢任何帮助。如果需要更多信息,请告诉我


另外(也许这应该是一个单独的问题/我需要更仔细地研究一下),但是在使用makefile之后,
/a.out
将只运行makefile,而不管我最后编译的是什么。不知道如何更改。

如果仔细查看编译行,您会发现
墙之前的
-
std=c++11
之前的
-
之间有一个非常细微的区别:

g++-Wall–std=c++11-c File.cpp
^     ^
下面是这两个选项,一个在另一个下面,用Windows剪贴工具捕捉,用Paint.net放大。您可以清楚地看到,第二个“连字符”更宽:

它更宽,因为它不是连字符-字符实际上是一个
en破折号
(Unicode代码点
U+2013

这个问题通常是由直接从文字处理器(a)或网页等位置剪切和粘贴引起的。因为它不被视为有效的引入字符(
hyphen-minus
,或Unicode代码点
U+002D
),它只是被视为一个文件名,因此出现了错误

我建议您只需重新键入该行(或仅键入
-std=c++11
位),以确保使用正确的字符


(a) 文字处理器具有智能文本替换功能,通常会将连字符转换为en或em破折号,或将字符串或字符文本从
“pax”
修改为
“pax”
。您可以禁用此行为(例如,MS Word中的智能引号),但有时非常方便


我只是倾向于避免使用文字处理器作为文本编辑器,或者意识到剪切粘贴的代码可能包含“可疑”字符。如果我从网络或文字处理器上获得的一段文本导致构建系统出现问题,我会检查(并手动重新键入)有问题的部分。

我犯了如下错误:

# CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std = c++11")

注意,在
-std
c++11

之间有NO空格,看起来“g++”实际上是在系统上调用
clang
。如果从命令行执行
g++--version
,会发生什么?clang的命令行应该与gcc兼容,但您可能需要比现有版本更新的命令行。实际上。。。看起来您的
-std
有一个em破折号,而不是普通的ASCII连字符。尝试在Makefile中重新键入它,并确保您没有使用花哨的文本编辑器,用某种花哨的字符替换
-
。哇,就是这样,谢谢。我想我复制并粘贴了,但我从来没有想过这是一件事。@notmyfriend:事实上,这是一个破折号而不是em,但你的评论仍然有效,它不是连字符减去它应该是:-)同样在
gcc/clang
注释上,我似乎记得Mac有一个
gcc
命令,它只是一个指向
clang
的硬/符号链接。这可能是导致
gcc
调用的
clang
输出的原因。