Linux的gcc,makefile和autotools
来源:互联网 发布:淘宝差评什么时候消失 编辑:程序博客网 时间:2024/05/17 09:05
gcc主要参数:
-g
只是编译器,在编译的时候,产生调试信息。
-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件。
例子用法:
gcc -c hello.c
他将生成.o的obj文件。
-S
只激活预处理和编译,就是指把文件编译成为汇编代码。
例子用法
gcc -S hello.c
他将生成.s的汇编代码。
-E
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.
例子用法:
gcc -E hello.c > pianoapan.txt 或
gcc -E hello.c –o hello.i
-o
指定目标输出文件名称。
例子用法
gcc -o hello.exe hello.c
-l和-L
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库 文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了,好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上 libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。放在/lib和/usr/lib和 /usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr /X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L /aaa/bbb/ccc -ltest。
-include和-I(i的大写)
-include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但 是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I /myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。
-O0
-O1
-O2
-O3
编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
举例有文件operator.h, operator.c和main.c
其中文件operator.h中引用了math.h头文件,main.c是主程序。
编写makefile文件:
main:main.o operator.o
gcc –g –lm main.o operator.o –o main
main.o:main.c
gcc main.c –o main.o
operator.o:operator.c operator.h
gcc operator.c –o operator.o
使用autotools自动生成makefile
1、# autoscan
生成了configure.scan文件。
2、修改configure.scan的文件名为configure.in,并修改configure.in文件:修改AC_INIT里面的参数;添加宏AM_INIT_AUTOMAKE;AC_OUTPUT后添加输出文件Makefile。
3、# aclocal
生成了aclocal.m4文件。
4、# autoconf
生成了configure文件。
5、autoheader
生成了config.h.in文件。
6、建立并编写Makefile.am文件。
7、# automake --add-missing
8、# ./configure
9、# make
修改后的configure.in文件: (红色为添加,蓝色为修改)
#
AC_PEERED(2.57)
AC_INIT(main, 1.0)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([operator.h])
AM_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(main, 1.0)
#
AC_PROG_CC
#Checks for libraries
AC_CHECK-LIB([m], [sqrt])
#
#
#
AC_CHECK_FUNC([sqrt])
AC_OUTPUT([Makefile])
编写的makefile.am文件:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=main.c operator.c operator.h
LIBS=-lm
- Linux的gcc,makefile和autotools
- Makefile文件编写和autotools的使用
- linux下编程用到的autotools工具 生成makefile文件
- linux 商业项目 makefile 自动生成工具Autotools的使用
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
- 【linux】浅谈Linux下的gcc编译器和"Makefile"文件
- makefile的和gcc参数
- autotools & makefile
- 【Linux技术】autotools制作makefile过程详解
- Linux下使用Autotools生成Makefile
- linux下使用autotools创建makefile文件
- linux autotools的使用
- 用autotools制作Makefile 和configure文件。
- 使用autotools制作Makefile和configure文件
- 用autotools制作Makefile 和configure文件。
- 用autotools制作Makefile 和configure文件
- JAVA 安全性转码代码(包括sql注入,跨站脚本)
- DBA方面的三十个问题,能回答出来的都是牛人
- 无法挂载sd卡(android),不能安装APK(1)
- 年月日三级级联菜单
- ATL和MFC,用哪种框架来创建ActiveX控件
- Linux的gcc,makefile和autotools
- ArcGIS for SQLServer创建数据集提示“查询已取消,因为此查询的估计开销 (%d) 出了配置的阈值 %d”
- 上传图片的缩放和图片添加水印
- JSTL标签库(一)
- 自己写的一个对于数组的操作方法
- 临时文件
- 蓝牙三国Kill:这算不算是鸡肋?
- JS 命名空间
- 判断列是否存在