我在makefile中遇到了一个问题,包括使用OpenMP进行并行计算。我得到的错误是
不能使用-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}发布于 2013-04-23 12:46:07
线
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,因为您已经在规则中使用它了,这正是gcc所抱怨的。
https://stackoverflow.com/questions/16169560
复制相似问题