错误:没有这样的文件或目录:编译makefile

时间:2015-11-13 01:58:57

标签: c++ c++11 compilation makefile

当我在终端中使用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,无论我编译的最后一件事。不知道如何改变它。

2 个答案:

答案 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")

请注意,-stdc++11之间存在空格