OpenMP Makefile,-fopenmp不起作用

时间:2013-10-27 17:02:09

标签: c++ makefile

我正在尝试使用Makefile编译我的项目,但不知何故-fopenmp标志不起作用。 这是Makefile:

TARGET=isaac
CC=g++
CFLAGS=-Wall -O2 -fopenmp
LDFLAGS=-lm -lpthread -lrt

OBJ=src/main.o src/bhtree.o src/body.o src/configreader.o src/diagnostics.o src/output.o src/quad.o src/timing.o src/vector2.o

isaac: $(OBJ)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJ) $(LDFLAGS)

%.o: src/%.cpp
$(CC) $(CFLAGS) -c $<

clean: 
rm src/*.o src/*~ isaac

这是调用“make”

时的输出
g++    -c -o src/main.o src/main.cpp
g++    -c -o src/bhtree.o src/bhtree.cpp
g++    -c -o src/body.o src/body.cpp
g++    -c -o src/configreader.o src/configreader.cpp
g++    -c -o src/diagnostics.o src/diagnostics.cpp
g++    -c -o src/output.o src/output.cpp
g++    -c -o src/quad.o src/quad.cpp
g++    -c -o src/timing.o src/timing.cpp
g++    -c -o src/vector2.o src/vector2.cpp
g++ -Wall -O2 -fopenmp -o isaac src/main.o src/bhtree.o src/body.o src/configreader.o src/diagnostics.o src/output.o src/quad.o src/timing.o src/vector2.o -lm -lpthread -lrt

编译源文件时缺少-fopenmp标志,因此完成的可执行文件是串行的,而不是并行的。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题在于您的规则根本不适用。您可以自由删除

%.o: src/%.cpp
    $(CC) $(CFLAGS) -c $<

你会得到与以前相同的结果。那是因为使用了一些预定义的规则而不是你的(虽然我不是很好的makefile专家)。

问题的核心是您的规则适用于./*.o个文件,但./src/*.o需要isaac。您可以更改规则

src/%.o: src/%.cpp
    $(CC) $(CFLAGS) -c $<

或者(更好)将所有自动生成的人员从src移动到某处。