- 论坛徽章:
- 0
|
在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文件则应该在当前目录。通过对编译器指定参数-IPATH>来指定头文件所在目录,可以用 #include >来引用。例如:gcc -I./include hello.c,将从当前目录下的include目录下去寻找头文件。 同理,程序中调用的库函数在编译时也需要指定路径,同时指定库。使用-LPATH>参数指定库文件的目录,-lFILE>指定包含的库文件。例如,要使用libXXX.so库,参数为-lXXX。 一般一个库编译完成后有库文件和头文件。如果要使用这个库,可以将库文件目录和头文件目录分别用-I和-L参数指定,也可以将他们拷贝到编译器的include和lib目录下。
----------[color="#02368d"]GCC——C程序是如何编译成的
2
[color="#000066"]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
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63775/showart_1685651.html |
|