make的参考路径

时间:2013-08-06 06:18:48

标签: linux makefile

我刚刚开始学习'make'命令和其他源自它的东西。 我有一个很好的参考html页面,它教会了我关于'make'的概念 http://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html 它说,像这样的事情

报价:

*# 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作为附加路径包含但是因为它是一个子目录,我是否必须包含它?

3 个答案:

答案 0 :(得分:2)

实际上这不包括任何头文件或库,-I选项告诉编译器在哪里找到包含在#include和{{1}的源代码中的头文件(标准文件除外)告诉链接器在哪里找到与-L选项链接的库。

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

变量名完全是任意的,但它们确实指出哪些选项属于哪个工具,例如LFLAGS(链接器标志)CFLAGS(编译器标志)。

-l/usr/lib通常分别包含系统库和标头。

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

答案 1 :(得分:0)

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

答案 2 :(得分: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中,您可以从该目录中提供相对路径。