Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1190090
  • 博文数量: 221
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2139
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-27 19:53
个人简介

JustForFun

文章分类

全部博文(221)

文章存档

2024年(6)

2023年(8)

2022年(2)

2021年(2)

2020年(29)

2019年(11)

2018年(23)

2017年(41)

2016年(76)

2015年(23)

我的朋友
最近访客

分类: LINUX

2016-09-19 09:51:34


/////////////////////////////////////////
当你修改了.h的宏时,要make clean后再make.因为make的实现可能不会考虑到头文件依赖关系,而导致其他包含此文件的.c不会得到从新编译。
static const BYTE RETURN_YES = 1; //不可修改,外部用到这个的返回值的大小
static const BYTE RETURN_NO =0;  //不可修改,外部用到这个返回值大小


//
$gcc -o test test.c -I /usr/local/include/libxml2/ -L /usr/local/lib -lxml2 -lz

我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:

例:gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld

上面这句表示在编译hello.c时:

(大 写I小写i的I)-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home /hello/include-->/usr/include-->/usr/local/include

-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib

 (大写L小写l的l)-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件) 如  -lpthread 寻找线程库



makefile里的gcc找不到头文件时和.o .a时
Change Makefile:
CFLAGS += path of header files
LDFLAGS += path of libs.
-L //指定库文件搜索路径 
-ltest//指定使用的动态库/静态库
-I //指定搜索头文件的路径
//////////////////////////////////////////////////////////
编译出问题 
crt1.o: No such file: No such file or directory

[root@bogon 4.2.2-eabi]# find .  -name "crt1.o"  -print
./usr/lib/crt1.o
解决问题


After reading the that jeremiah posted, i found the gcc flag that works without the symlink:

gcc -B/usr/lib/x86_64-linux-gnu hello.c

So, you can just add -B/usr/lib/x86_64-linux-gnu to the CFLAGS variable in your Makefile.
在主make里修改CFLAGS          := -I/4.2.2-eabi/usr/include -B/4.2.2-eabi/usr/lib
////

-Bprefix

这 个选项指定GCC到哪去查找自己的可执行文件、库文件、头文件和数据文件。编译器驱动程序运行一个或多个子程序如ccp,cc1,as,ld。当编译器需 要运行某个子程序时,它将prefix作业子程序的前缀(如prefix/as)。为了正确运行每个子程序,编译器驱动程序首先-B选项指定的前缀,如果 那个可文件(如prefix/as)没有查找到或者没有指定-B选项,则编译器驱动程序将尝试使用标准前缀:/usr/lib/gcc/ 和/usr/local/lib/gcc/。如果用这两个前缀也没查找到,则使用没有修改过的程序名(如as)在PATH环境变量指定的路径下查找。

编译器会核查-B选项提供的前缀(目录),必要情况下编译器会在最后加一个分隔符。如-B/usr/bin  则最后的前缀会为:/usr/bin/,编译器在最后增加了分隔符。

-B 选项指定的前缀同样对链接器查找库文件有效,因为编译器会将该选项转换为-L选项。另外-B选项同样也对预处理器查找头文件时有效,因为编译器会将该选项 转换为预处理器中的-isystem选项,在这种情况下,编译器会在prefix最后加上“include”即prefix/include。

如果需要,运行时库文件“libgcc.a”同样会通过-B选项指定的前缀来查找,如果没找到,则接着会尝试用上面提到的那两个标准前缀查找,如果还没有找到,则会忽略掉对libgcc.a的链接。

另外一种指定prefix前缀的方式是通过环境变量GCC_EXEC_PREFIX来指定,不过会在-B选项指定的前缀之后搜索。即先尝试用-B选项指定的前缀再尝试使用GCC_EXEC_PREFIX指定的前缀,再用标准前缀。其实前面提到的两个标准前缀应该是在安装编译器是指它的!!所以每个系统可能还不一样。

/////////////////////////////////////////////////////////////////////////////////////////////////////

摘录自
图片

图片

图片

图片

图片

图片

图片
注意:这里指定的路径仅限于Makefile文件内容中出现的.h文件,并不能指定源文件中包含的头文件所在的路径(在.c源文件中所包含的头文件路径需要使用gcc的“-I” 选项来指定。)

图片

图片

图片

图片

图片



图片

图片

图片

图片

图片

图片


图片

图片

图片









阅读(1605) | 评论(0) | 转发(0) |
0

上一篇:makefile杂记

下一篇:宝贵(环境搭建)

给主人留下些什么吧!~~