这里的问题是-std=c++11 和-fopenmp 之间的空格。它将这两个参数拆分,-fopenmp 被解释为选项-f,然后openmp 被解释为makefile,make 试图构建它,因为它在当前目录中找不到它。
你需要用引号(")来执行make,比如
$ make CXXFLAGS="-std=c++11 -fopenmp"
这会将CXXFLAGS= -std=c++11 -fopenmp 传递给make。我们可以通过以下简单的makefile 看到这种行为。
CXX = g++
CXXFLAGS = -std=c++11
all:
@echo $(CXXFLAGS)
运行make 将产生输出
$ make
-std=c++11
运行make CXXFLAGS="-std=c++11 -fopenmp"会产生
$ make
-std=c++11 -fopenmp
正确的输出和我们希望达到的目标。
顺便说一句,make CXXFLAGS= -std=c++11 -fopenmp 在您的问题中应该产生更多的错误,而不仅仅是
make: openmp: No such file or directory
make: *** No rule to make target 'openmp'. Stop.
因为CXXFLAGS= 和-std=c++11 之间有空格。我明白了
$ make CXXFLAGS= -std=c++11 -fopenmp
make: invalid option -- =
make: invalid option -- c
make: invalid option -- +
make: invalid option -- +
make: invalid option -- 1
make: invalid option -- 1
例如,如果您想使用 -std=c++14 而不是 -std=c++11 进行编译,则需要使用 make 执行
$ make CXXFLAGS=-std=c++14
注意:没有空格,或等价于
$ make CXXFLAGS="-std=c++14"
再次没有空格。