Chinaunix首页 | 论坛 | 博客
  • 博客访问: 542000
  • 博文数量: 150
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-17 00:19
文章分类

全部博文(150)

文章存档

2011年(1)

2009年(14)

2008年(135)

我的朋友

分类: LINUX

2008-12-08 11:48:25


在makefile中有

INC =  -I$(COMPTOP)/inc/ -I$(COMPTOP)/lib/Driver/arch/Tavor  -g -DDIAG_APPS -DDIAG_OVER_MSL -DDIAG_OVER_MSL_APPS \
    -DENV_LINUX -DOSA_LINUX -DOSA_QUEUE_NAMES -DUSE_OSA_SEMA -D_FDI_USE_OSA_

CFLAGS += $(INC) -mabi=aapcs-linux

$(BUILDTOP_ENG)/%.o :$(ENGINE_SRC)/%.c
    $(CC) $(CFLAGS) -o $@ -c $^
看不懂INC是做什么的,还有几个-D开头的东西。


下面找到的一点资料,能解释一下:


3.库文件和头文件
    在程序中,使用#include <stdio.h>类似的头文件stdio.h在编译器的头文件路径中,#include "abc.h"中的stdio.h文件则应该在当前目录。通过对编译器指定参数-I<PATH>来指定头文件所在目录,可以用 #include <>来引用。例如:gcc -I./include hello.c,将从当前目录下的include目录下去寻找头文件。
    同理,程序中调用的库函数在编译时也需要指定路径,同时指定库。使用-L<PATH>参数指定库文件的目录,-l<FILE>指定包含的库文件。例如,要使用libXXX.so库,参数为-lXXX。
    一般一个库编译完成后有库文件和头文件。如果要使用这个库,可以将库文件目录和头文件目录分别用-I和-L参数指定,也可以将他们拷贝到编译器的include和lib目录下。

----------GCC——C程序是如何编译成的
2
gcc -D:gcc的预定义功能
gcc编译的时候提供了预定义功能,参数是-D,  通过man gcc可以了解更多:
-D name
           Predefine name as a macro, with definition 1.

       -D name=definition
           Predefine name as a macro, with definition definition.  The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In particular, the definition will be truncated by embedded new-line characters.

可以通过以下例子解释一下:
int main()
{
    #ifdef HELLO
    printf("HELLO defined\n");
    #else
    printf("HELLO not define\n");
    #endif

    return 0;
}
在该程序中,判断是否已经定义了宏DEBUG,从而输出相应的语句。
如果编译该程序时采用了gcc -DHELLO, 则输出:HELLO defined
阅读(3515) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~