在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) |