2013-02-28 8 views
5

C Makefileに問題があります。ここでC Makefileの問題:「gcc:-lm:リンカーが実行されていないためにリンカーの入力ファイルが使用されていないため、mpicc -lm 3D-ELM.o -o 3D-ELM.exe」

は、メイクファイルの内容をされています。私が作るときは、ここでエラーが

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: linker input file unused because linking not done

誰が悪いのか知っていますか?事前に

多くのおかげで、


EDITは:手に入れました。オブジェクトファイルを作るときにlibsを渡す必要はありません... Doh!あなたが唯一のコンパイラを呼び出しているこのステップで

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

前髪はデスクからすべてのあなたの助けの人たちのための

おかげで、

答えて

7

問題はメイクファイルのこの部分から来て頭。 -cスイッチはコンパイラにオブジェクトファイルをコンパイルするよう指示し、リンカーはまったく関与しません。リンクするものはありませんので、$(LIBS)部分は不要です。

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

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

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

関連する問題