当我在终端中使用 make
进行编译时,它会打印:
g++ -Wall –std=c++11 -c File.cpp
clang: error: no such file or directory: '–std=c++11'
make: *** [Book.o] Error 1
生成文件:
PROG = studs
CC = g++
OBJS = File.o FileTestDriver.o
CPPFLAGS = -Wall –std=c++11
$(PROG) : $(OBJS)
$(CC) -o $(PROG) $(OBJS)
File.o : File.h
$(CC) $(CPPFLAGS) -c File.cpp
FileTestDriver.o :
$(CC) $(CPPFLAGS) -c FileTestDriver.cpp
clean:
$(RM) $(PROG) $(OBJS)
FileTestDriver 具有主要功能,而 File.cpp 只是一个带有一些构造函数、实例变量和函数的简单类。我不确定问题出在哪里,但我认为它在 Makefile 中,因为我今天才开始使用它们。
当我简单地编译 g++ -std=c++11 File.cpp
时,我得到了错误:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
但我假设错误是因为它有一个 .h
并且需要编译 makefile。无论如何,不确定我做错了什么,但我很感激任何帮助。如果需要更多信息,请告诉我。
此外(也许这应该是一个单独的问题/我需要更仔细地看),但是在使用 makefile 之后,./a.out
将只运行 makefile,而不管最后一件事我编的。不确定如何更改它。
最佳答案
如果您仔细查看您的编译行,您会发现 Wall
之前的 -
和–
std=c++11
之前:
g++ -Wall –std=c++11 -c File.cpp
^ ^
这是这两个选项,一个在另一个下面,用 Windows 截图工具捕获并用 Paint.net 放大。您可以清楚地看到第二个“连字符”更宽:
它更宽,因为它不是连字符 - 该字符实际上是一个en dash
(Unicode 代码点U+2013
)。
此问题通常是由直接从文字处理器(a) 或网页等地方剪切和粘贴引起的。因为它不被视为有效的前导字符(hyphen-minus
或 Unicode 代码点 U+002D
),它只是被视为文件名,因此出现错误.
我建议您重新键入该行(或仅 -std=c++11
位)以确保它使用了正确的字符。
(a) 具有智能文本替换功能的文字处理器通常会将连字符转换为 en- 或 em- 破折号,或者从 "pax"
到 “pax”
。您可以禁用此行为(例如 MS Word 中的智能引号),但它有时非常方便。
我只是倾向于避免将文字处理器用作文本编辑器,或者意识到剪切'n'粘贴代码可能包含“可疑”字符的可能性。如果我从 Web 或文字处理器获得的一段文本导致我的构建系统出错,我会检查(并手动重新输入)有问题的部分。
关于c++ - 错误 : no such file or directory: '–std=c++11' after compiling makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33684759/