没有制定目标'openmp'的规则?
No rule to make target 'openmp'?
makefile 中定义如下:
CXX = g++
CXXFLAGS = -std=c++11
我想使用 OpenMP 指令编译我的代码而不更改原始 makefile(运行 非常完美)。该手册建议了一种方法来执行此操作,即在命令行上更改它。然而,当我 运行,
make CXXFLAGS=-std=c++11 -fopenmp
弹出之前提到的错误。有人可以帮助我了解我做错了什么吗?
Space - 最后的边界。您需要引号
make CXXFLAGS="-std=c++11 -fopenmp"
shell 在以白色 space 分隔的单词边界处拆分命令行单词。引用用于避免分词。
这里的问题是 -std=c++11
和 -fopenmp
之间的 space。它将这两个参数分开,-fopenmp
被解释为选项 -f
,然后 openmp
被解释为 make
尝试构建的 makefile
,因为它可以在当前目录下找不到。
你需要用引号("
)执行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
之间的 space。我得到
$ 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
注意:无space,或等同于
$ make CXXFLAGS="-std=c++14"
再次没有 space。
makefile 中定义如下:
CXX = g++
CXXFLAGS = -std=c++11
我想使用 OpenMP 指令编译我的代码而不更改原始 makefile(运行 非常完美)。该手册建议了一种方法来执行此操作,即在命令行上更改它。然而,当我 运行,
make CXXFLAGS=-std=c++11 -fopenmp
弹出之前提到的错误。有人可以帮助我了解我做错了什么吗?
Space - 最后的边界。您需要引号
make CXXFLAGS="-std=c++11 -fopenmp"
shell 在以白色 space 分隔的单词边界处拆分命令行单词。引用用于避免分词。
这里的问题是 -std=c++11
和 -fopenmp
之间的 space。它将这两个参数分开,-fopenmp
被解释为选项 -f
,然后 openmp
被解释为 make
尝试构建的 makefile
,因为它可以在当前目录下找不到。
你需要用引号("
)执行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
之间的 space。我得到
$ 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
注意:无space,或等同于
$ make CXXFLAGS="-std=c++14"
再次没有 space。