我在生成文件中使用 OpenMP 进行并行计算时遇到问题。我得到的错误是
不能为多个文件指定 -o 和 -c、-S 或 -E
这是我的生成文件:
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}
最佳答案
线
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.o
制定特殊规则和 lateral.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 .
编辑:
抱歉,我错过了 cflags,那里也有一个错误:
CFLAGS = -c -C -O3 -openmp=parallel
你应该删除 -c
因为你已经在规则中使用它了,这就是 gcc
正在提示。
关于c++ - Makefile 与 OpenMP : cannot specify -o with -c, -S 或 -E 与多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169560/