C Makefile故障:"gcc:-lm:链接器输入文件未使用,因为链接未完成mpicc -lm 3D-ELM.o -o 3D-ELM.exe"

Eam*_*orr 5 c makefile

我在使用C Makefile时遇到了一些麻烦.

以下是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)
Run Code Online (Sandbox Code Playgroud)

当我做,这是错误:

gcc:-lm:链接器输入文件未使用,因为链接未完成

有谁知道什么是错的?

提前谢谢了,


编辑:知道了.制作目标文件时我不需要传递lib ... Doh!刘海离开了办公桌

谢谢你们的帮助,

Bla*_*iev 7

问题来自makefile的这一部分:

$(PROJECT).o : $(SRC)/$(PROJECT).c
        $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c
Run Code Online (Sandbox Code Playgroud)

在此步骤中,您只是调用编译器.该-c开关告诉编译器只编译到目标文件,并且根本不涉及链接器.由于没有任何内容可以链接,因此该$(LIBS)部分是不必要的.

实际链接在以下阶段完成:

$(PROJECT).exe : $(OBJECTS)
        $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe
Run Code Online (Sandbox Code Playgroud)

这是将各个目标文件与库合并在一起以生成可执行文件的位置.此时不调用编译器本身,因为源文件已经转换为目标文件.