[英]How to fix error : g++.exe : cannot specify -o with -c or -S and multiple compilations
[英]Makefile with OpenMP: cannot specify -o with -c, -S or -E with multiple files
我的问题包括在makefile中使用OpenMP进行并行计算。 我得到的错误是
不能将-o与-c,-S或-E指定给多个文件
这是我的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}
线
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}
你可以找到上面的语法的详细说明这里还是一个更详细的文档在这里 。
编辑 :
抱歉我错过了C标志,那里也有一个错误:
CFLAGS = -c -C -O3 -openmp=parallel
您应该删除-c
因为您已经在规则中使用了-c
,这就是gcc
抱怨的内容。
IMO(但目前无法测试)此行有问题:
CFLAGS = -c -C -O3 -openmp=parallel
我认为-openmp=parallel
应该只是-fopenmp
。 首先是因为这是OpenMP的正确编译标志,其次是-o
之后的内容将被解释为输出文件的名称。 并且如错误消息所述,您不能同时使用-c
和-o
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.