Makefile 没有制定目标的规则';openmp';?
在makefile中定义了以下内容:Makefile 没有制定目标的规则';openmp';?,makefile,openmp,options,compiler-flags,Makefile,Openmp,Options,Compiler Flags,在makefile中定义了以下内容: CXX = g++ CXXFLAGS = -std=c++11 我想用OpenMP指令编译我的代码,而不改变原始的makefile(它运行得很好)。该手册建议了一种方法,即在命令行中对其进行更改。但是我跑的时候, make CXXFLAGS=-std=c++11 -fopenmp 弹出前面提到的错误。有人能帮我理解我做错了什么吗 太空——最后的前沿。您需要引用中的 make CXXFLAGS="-std=c++11 -fopenmp" shell在由
CXX = g++
CXXFLAGS = -std=c++11
我想用OpenMP指令编译我的代码,而不改变原始的makefile(它运行得很好)。该手册建议了一种方法,即在命令行中对其进行更改。但是我跑的时候,
make CXXFLAGS=-std=c++11 -fopenmp
弹出前面提到的错误。有人能帮我理解我做错了什么吗 太空——最后的前沿。您需要引用中的
make CXXFLAGS="-std=c++11 -fopenmp"
shell在由空格分隔的单词边界处拆分命令行单词。引用用于避免分词。这里的问题是
-std=c++11
和-fopenmp
之间的空格。它将这两个参数分割开来,-fopenmp
被解释为选项-f
,然后openmp
被解释为一个makefile
,该make
试图构建,因为它在当前目录中找不到它
您需要执行带有引号(“
)的make
,如
$make cxflags=“-std=c++11-fopenmp”
这将把cxflags=-std=c++11-fopenmp
传递到make
。我们可以通过以下简单的makefile
看到这种行为
CXX = g++
CXXFLAGS = -std=c++11
all:
@echo $(CXXFLAGS)
运行make
将生成输出
$make
-std=c++11
运行make cxflags=“-std=c++11-fopenmp”
将产生
$make
-std=c++11-fopenmp
正确的输出和我们希望达到的目标
除了命令,
makecxflags=-std=c++11-fopenmp
,您的问题中应该会产生更多的错误
make:openmp:没有这样的文件或目录
生成:**没有规则将目标设置为“openmp”。停止。
由于cxflags=
和-std=c++11
之间的空格,我得到了
$make cxflags=-std=c++11-fopenmp
make:无效选项--=
make:无效选项--c
make:无效选项--+
make:无效选项--+
make:无效选项--1
make:无效选项--1
例如,如果您希望使用-std=c++14
而不是-std=c++11
进行编译,则需要使用执行make
$make cxflags=-std=c++14
注意:无空格,或与
$make cxflags=“-std=c++14”
同样没有空格。谢谢!将其写成字符串非常有效!问题中CXXFLAGS后面的空格是一个拼写错误,我已经更正了!:)不用麻烦,很乐意帮忙。