5

我在使用 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)

当我制作时,这是错误:

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

有谁知道出了什么问题?

提前谢谢了,


编辑:明白了。制作目标文件时,我不需要传递库... 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 回答