5

CMakefileで問題が発生しました。

Makefileの内容は次のとおりです。

PROJECT = 3D-ELM
MPICC = mpicc
CLAGS = -g -O3
LIBS = -lm
SRC = src_el
OBJECTS = $(PROJECT).o

$(PROJECT).exe : $(OBJECTS)
        $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe

$(PROJECT).o : $(SRC)/$(PROJECT).c
        $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c

clean:
        rm -rf *o $(PROJECT)

私が作るとき、ここにエラーがあります:

gcc:-lm:リンクが行われていないため、リンカー入力ファイルは使用されていません

誰かが何が悪いのか知っていますか?

よろしくお願いします。


編集:了解しました。オブジェクトファイルを作成するときにlibsを渡す必要はありません...Doh!前髪は机から離れる

助けてくれてありがとう、

4

1 に答える 1

7

この問題は、makefile の次の部分に起因します。

$(PROJECT).o : $(SRC)/$(PROJECT).c
        $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c

このステップでは、コンパイラを呼び出すだけです。この-cスイッチは、オブジェクト ファイルにコンパイルすることのみをコンパイラに指示し、リンカはまったく関与しません。リンクするものがないので、その$(LIBS)部分は不要です。

実際のリンクは次の段階で行われます。

$(PROJECT).exe : $(OBJECTS)
        $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe

ここで、個々のオブジェクト ファイルがライブラリと一緒にマージされ、実行可能ファイルが生成されます。ソース ファイルは既にオブジェクト ファイルに変換されているため、この時点ではコンパイラ自体は呼び出されません。

于 2013-02-28T10:53:38.033 に答える