使用OpenMP的Makefile:不能将-o与-c,-S或-E一起指定为多个文件

时间:2013-04-23 12:38:28

标签: c++ c openmp

我遇到一个问题,包括在makefile中使用OpenMP进行并行计算。我得到的错误是

无法使用多个文件指定带-c,-S或-E的-o

这是我的makefile:

GSLFLAGS := pkg-config --cflags gsl
LIBGSL := pkg-config --libs gsl

CFLAGS = -c -C -O3 -openmp=parallel

lateral.o:lateral.cxx

    g++ -c lateral.cxx 

main.o:main.cxx 

    g++ -c main.cxx  $< ${GSLFLAGS} ${CFLAGS}

alg:main.o lateral.o

    g++ -o  $@ $^ ${LIBGSL}

2 个答案:

答案 0 :(得分:2)

该行

g++ -c main.cxx $< ${GSLFLAGS} ${CFLAGS}

应该阅读

g++ -c main.cxx ${GSLFLAGS} ${CFLAGS}

因为,$<扩展到第一个先决条件main.cxx,提供g++ -c main.cxx main.cxx。为避免这种情况,您甚至可以编写通用规则,如:

%.o: %.cxx
    g++ -c -o $@ ${GSLFLAGS} ${CFLAGS} $^

您不需要main.olateral.o的特殊规则,完整的makefile将是:

GSLFLAGS := pkg-config --cflags gsl
LIBGSL := pkg-config --libs gsl

all: alg

%.o: %.cxx
    g++ -c -o $@ ${GSLFLAGS} ${CFLAGS} $^

alg: main.o lateral.o
    g++ -o  $@ $^ ${LIBGSL}

您可以找到上面here语法的详细说明或更详细的文档here

修改

抱歉,我错过了C标志,那里也有错误:

CFLAGS = -c -C -O3 -openmp=parallel

您应该删除-c,因为您已在规则中使用它,这是gcc正在抱怨的内容。

答案 1 :(得分:1)

IMO(但现在无法测试)这条线有问题:

CFLAGS = -c -C -O3 -openmp=parallel

我认为-openmp=parallel应该是-fopenmp。首先,因为这是OpenMP的正确编译标志,其次是因为-o之后的内容将被解释为输出文件的名称。正如您的错误消息所示,您无法一起使用-c-o