当我在终端中使用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 具有main函数, 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,无论我编译的最后一件事。不知道如何改变它。
答案 0 :(得分:8)
如果您仔细查看编译行,,您会看到-
之前的Wall
与之前的–
之间存在非常微妙的差异std=c++11
:
g++ -Wall –std=c++11 -c File.cpp
^ ^
该字符实际上是 短划线 (Unicode代码点U+2013
),这个问题通常是由字处理器等地方剪切和粘贴引起的。因为它不被视为有效的引入字符( 连字符 ,Unicode代码点U+002D
),所以它只是被视为文件名,因此错误。
我建议您重新输入该行(或仅-std=c++11
位)以确保它使用正确的字符。
答案 1 :(得分:0)
我犯了如下错误:
# CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std = c++11")
请注意,-std
和c++11
之间存在否空格