2013-08-06 77 views
0

我刚开始学习'make'命令和其他派生它的东西。 我是教我“制作”概念 http://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html 这个很好的参考html页面和它说,有些事情是这样make的参考路径

报价:

*# define any directories containing header files other than /usr/include 
# 
INCLUDES = -I/home/newhall/include -I../include 
# define library paths in addition to /usr/lib 
# if I wanted to include libraries not in /usr/lib I'd specify 
# their path using -Lpath, something like: 
LFLAGS = -L/home/newhall/lib -L../lib 
# define any libraries to link into executable: 
# if I want to link in libraries (libx.so or libx.a) I use the -llibname 
# option, something like (this will link in libmylib.so and libm.so: 
LIBS = -lmylib -lm* 

那么这里是我不明白的东西。我不明白为什么你必须包含

单独的包含INCLUDES和LFLAGS的头文件。/usr/lib和/ usr/include中的文件有什么区别?这对我来说几乎是相同的 ,因为它们都包含不是共享对象(+ archieves)或环境路径中的头文件路径。

加上,因为usr/include是编译时的默认路径,包含子目录中的所有文件以及?例如,我想要做的是,我想包括/usr/include/gtk+-3.0作为一个额外的路径,但因为它是一个子目录,我必须包括它吗?

回答

0

/usr/lib包含链接到可执行文件的目标文件库。 /usr/include包含头文件,其中包含与库一起使用的函数,类型和结构的声明。他们是两件不同的事情。

2

其实这不包括任何标题或图书馆,-I选项告诉编译器在哪里找头(比标准者除外)包括在具有#include-L源代码告诉链接器在哪儿找到链接库-l选项。

换句话说,他们将目录添加到搜索路径,而不是实际的标题或图书馆...

变量名完全是任意的,但是他们并指出哪些选项属于哪种工具,例如LFLAGS(连接标志)CFLAGS(编译器标志)。

/usr/lib/usr/include通常分别包含系统库和头文件。

我建议你在移动之前阅读更多关于C和GCC的内容,因为它只是用来编写脚本编译过程。

0
  1. INCLUDES指定编译器将搜索包含在程序中的.c和.h文件的路径。即如果你写程序包含test.h,编译器会在C文件的同一目录中搜索,以及你在make文件中使用INCLUDES指定的目录。

  2. LFLAGS指定库路径。其中包含您用于程序的库。使用INCLUDES区分它的原因是INCLUDES包含源文件,其中LFLAGS仅包含二进制文件。并且还将任何C实用程序的标准 约定分配给源和库使用两个不同的文件夹。

  3. 要使用驻留在/usr/include/gtk+-3.0中的文件,您可以将其包含为#include“gtk + -3.0/filename.h”。由于/ usr/include包含在INCLUDES中,因此可以从该目录提供相对路径。