2016-08-12 153 views
-3

我在link上执行“使用”真正“交叉编译器”描述的指南。在指南的底部有一个标准的makefile。我用C编写了一个简单的程序,并用命令让它运行。现在我想用库“ev3c.h”编写一个程序。我怎样才能在makefile中添加这个库?在makefile上添加库

+0

这是一个标题。将其包含在您的源代码中。链接一个库(libblah.a例如使用-lblah作为编译选项 – rscarson

+0

对不起,但我不明白你的意思。我的ev3c.h路径是/ home/daniele/ev3c/include。我怎样才能插入这个在makefile中? – Daniele

回答

0

顶端如果您正在使用gcc或铿锵,通过-I /home/daniele/ev3c/include给它你的食谱。 这将允许您从#include "someheader"从该路径#include

至于化妆处理的包含文件而言,他们通常是隐含的依赖关系,这是你平时不想提及他们在你的依赖关系明确,因为编译器,如clanggcc可以检测到它们和将它们添加到适当的Makefile规则中。

-MMD -MF somefile允许你做这样的#include依赖检测用gcc或铿锵:

例如:

%.o: %.c 
    $(COMPILE.c) -I /home/daniele/ev3c/include $(OUTPUT_OPTION) $< -MMD -MF $(patsubst %.o,%.o.d,[email protected]) 

-include $(wildcard *.o.d) 

这将有编译器检测包括每个编译的C文件和依赖性-include行会将这些依赖关系添加到您的Makefile中,因此如果您的C文件包含"foo.h"和foo.h更改,即使您没有提及foo.h作为显式依赖关系,make也会触发重新编译。

-1

您的.h文件是标题。头文件包含在源代码中,而不是像编译时那样在编译时:

#include "ev3c.h" 

例如。

库有一个不同的扩展名,例如.a。您将添加libev3c.a与:

-lev3c 

您的makefile中调用您的编译器的行。但是,你有一个头,所以只需添加的#include“ev3c.h”到您的源代码(.c文件)

+0

您可能还需要在命令行中添加'-I/home/daniele/ev3c/include'或者'-L/home/daniele/ev3c/lib' - 路径来自注释,并且也许可以通过'EV3CDIR = $ {HOME}/ev3c'作为宏来处理,然后在make规则中使用'$ {EV3CDIR}'。 –