0

Makefile に 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}
4

2 に答える 2

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.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が不満です。

于 2013-04-23T12:46:07.723 に答える
1

IMO (ただし、今はテストできません) この行には何か問題があります:

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

-openmp=parallelはただあるべきだと思います-fopenmp。1 つ目は、これが OpenMP の正しいコンパイル フラグであるためです。2 つ目は、その後にあるもの-oが出力ファイルの名前として解釈されるためです。-cエラーメッセージにあるように、 and を-o一緒に使用することはできません。

于 2013-04-23T13:11:02.773 に答える