Makefile:“未定义的cos引用”

时间:2017-12-12 09:39:40

标签: c makefile clang

我刚开始学习makefile文件。我创建了一个由两个函数组成的程序,并希望使用makefile将它们放在一起。这是我的档案:

#Makefile

all: main

main: main.o find_root.o
    clang -o main main.o find_root.o

main.o: main.c
    clang -c -Wall --pedantic -std=c11 main.c -lm

find_root.o: find_root.c
    clang -c -Wall --pedantic -std=c11 find_root.c -lm

clean: rm -f main *.o*

但是,当我运行它时,我收到一个错误 - “未定义的cos引用”。我在我的程序中使用余弦函数,但我已经将库链接到这两个文件的编译。我想在第一个clang选项中添加“-lm”。这导致没有错误,但它发出警告 - 说“-lm链接器未使用”。我应该在文件中更改什么?

2 个答案:

答案 0 :(得分:3)

“-lm”是一个链接器选项,但您只在编译规则(main.o: main.c)中包含它。您需要将其包含在链接器规则(main: main.o find_root.o)中。

在编译过程中忽略-lm选项并在链接期间丢失。

答案 1 :(得分:1)

编译时不使用链接器标志,但链接时,main规则的命令应该是-lm,而不是*.o文件的命令。 / p>

更好的方法是设置适当的变量,让Make使用其内置规则:

#Makefile

LDLIBS += -lm
CFLAGS += -Wall --pedantic -std=c11
C = clang

all: main

main: main.o find_root.o
    $(LINK.c) $^ $(LDLIBS) -o $@

clean:
    $(RM) main *.o *~