当前位置: 技术问答>linux和unix
关于 GCC 的问题
来源: 互联网 发布时间:2015-04-06
本文导语: 本人一直工作于 WIN32、MFC AND ATL 下,现有些东东得用 GCC 来生成代码,哪位高手可以给本人说说 GCC 的开发环境的一些基本信息及操作要领。比如如何编译、连接成一个程序,如何定制编译。 | ...
本人一直工作于 WIN32、MFC AND ATL 下,现有些东东得用 GCC 来生成代码,哪位高手可以给本人说说 GCC 的开发环境的一些基本信息及操作要领。比如如何编译、连接成一个程序,如何定制编译。
|
已发,make的最新版官方手册。html和pdf版。
英文,自己看了。
英文,自己看了。
|
《GNU/Linux高级编程》上边有一章讲Makefile的。
|
makefile的资料网上一堆堆,自己先搜一下好吗?如果不知道哪个好,先看看POSIX标准里的:http://www.opengroup.org/onlinepubs/007904975/utilities/make.html
GCC的开发环境很多,按照你的要求,你需要的只是autoconf系列工具,这个你可以去学习autobook(http://sources.redhat.com/autobook/)。不过你现在还没有掌握makefile,学习这个稍早,所以先看看上边的再开始学习autobook。一定要多试,多用。
GCC的开发环境很多,按照你的要求,你需要的只是autoconf系列工具,这个你可以去学习autobook(http://sources.redhat.com/autobook/)。不过你现在还没有掌握makefile,学习这个稍早,所以先看看上边的再开始学习autobook。一定要多试,多用。
|
1.关于高手。
我对高手的理解,就是对计算机的使用达到自由的境界(这是相对的,对于winOS上的自由同linux上的自由本身就不可同日而语),如果把OS比做舞台,那么在win这个舞台上,你永远是个蹩脚的跳舞师。具体破不破坏的问题是这里达到基本自由的高手本人道德的问题,跟技术没有关系吧。
2.关于gcc的使用平台
对于gcc许多知识浅薄的人认为是linux或win上边一些专业公司提供。我告诉你,你说的“我想 GCC 并非在 WIN 环境下不能使用”根本就不是并非,gcc现在已经可以以主机和目标机运行在几十种OS和十几种硬件平台上,包括win,dos。我现在就用gcc在win下写一些程序,包括可以用rsxntdj生成同winGUI程序相同的图形程序。
3.关于gcc的使用
你首先没有搞清make/gmake和gcc的关系。
首先make是用一个脚本变量系统来解决gcc命令行参数需重复输入的问题。
比如说
makefile已设定
CC=gcc
CFLAG=-I/usr/include -Wall -fomit-framepointer -O2
LDFLAG=-L/usr/lib -lc -lm
OBJECT=a.o b.o...
CPP=a.c b.c...
ALL:
CC CFLAG LDFLAG -o OBJECT CPP
调用make时就会生成gcc -I/usr/include -L/usr/lib -lc -lm -Wall -fomit-framepointer -O2 -o a.o b.o... a.c b.c
具体的命令行可以根据makefile里脚本执行过程动态改变.CFLAG,CPP,OBJECT变量变化就会改变编译命令行。而到底怎么去编写makefile除了make本身的脚本规则之外(比较简单)需要更多了解的是gcc的命令行选项。你不关心gcc而将重点放到了make本身就是本末倒置。
4.关于gcc的能力
我再废话几句,因为看到很多人将gcc看作是象tc一样而不平,它的能力远远超过了VC6--7。
a.移植能力上面已经有讲。
b.编译能力:gcc可以支持编译等级,只要加不同的参数就可以让gcc生成从C(CPP)--->OBJC--->ASM--->OBJ--->EXEBIN(各种格式) 的编译链中的任何一个阶段的输出。其中OBJC是C(CPP)经编译预处理后的输出(还是C代码)。并且支持目标平台代码输出。
c.效能:gcc的产生的代码效能高而且严谨。过去很多人在编译程序时和产生的exe有问题,就将它作为BUG向gcc小组报告,但后来都被证明是不同硬件的问题,包括内存,cpu。后来就有人专门用它来检测硬件。
d.先进性:如果你认为c语言是一成不变的就错了。我们通常所说的ANSI C就是C标准,而课本里学的C其实是C77标准的子集。其后ISO又出版了C89,C95,C99。而C99包含对C语言一些弊端的最新修正,和对C语言功能和标准库的扩充的最新版。而据我所知,GCC-3.3是第一个真正开始支持C99标准的编译器。
e.多语言支持:gcc以单独模块的形式支持现在主流的编程语言:C,C++,FORTRAIN,ADA,PASCAL,JAVA。
我对高手的理解,就是对计算机的使用达到自由的境界(这是相对的,对于winOS上的自由同linux上的自由本身就不可同日而语),如果把OS比做舞台,那么在win这个舞台上,你永远是个蹩脚的跳舞师。具体破不破坏的问题是这里达到基本自由的高手本人道德的问题,跟技术没有关系吧。
2.关于gcc的使用平台
对于gcc许多知识浅薄的人认为是linux或win上边一些专业公司提供。我告诉你,你说的“我想 GCC 并非在 WIN 环境下不能使用”根本就不是并非,gcc现在已经可以以主机和目标机运行在几十种OS和十几种硬件平台上,包括win,dos。我现在就用gcc在win下写一些程序,包括可以用rsxntdj生成同winGUI程序相同的图形程序。
3.关于gcc的使用
你首先没有搞清make/gmake和gcc的关系。
首先make是用一个脚本变量系统来解决gcc命令行参数需重复输入的问题。
比如说
makefile已设定
CC=gcc
CFLAG=-I/usr/include -Wall -fomit-framepointer -O2
LDFLAG=-L/usr/lib -lc -lm
OBJECT=a.o b.o...
CPP=a.c b.c...
ALL:
CC CFLAG LDFLAG -o OBJECT CPP
调用make时就会生成gcc -I/usr/include -L/usr/lib -lc -lm -Wall -fomit-framepointer -O2 -o a.o b.o... a.c b.c
具体的命令行可以根据makefile里脚本执行过程动态改变.CFLAG,CPP,OBJECT变量变化就会改变编译命令行。而到底怎么去编写makefile除了make本身的脚本规则之外(比较简单)需要更多了解的是gcc的命令行选项。你不关心gcc而将重点放到了make本身就是本末倒置。
4.关于gcc的能力
我再废话几句,因为看到很多人将gcc看作是象tc一样而不平,它的能力远远超过了VC6--7。
a.移植能力上面已经有讲。
b.编译能力:gcc可以支持编译等级,只要加不同的参数就可以让gcc生成从C(CPP)--->OBJC--->ASM--->OBJ--->EXEBIN(各种格式) 的编译链中的任何一个阶段的输出。其中OBJC是C(CPP)经编译预处理后的输出(还是C代码)。并且支持目标平台代码输出。
c.效能:gcc的产生的代码效能高而且严谨。过去很多人在编译程序时和产生的exe有问题,就将它作为BUG向gcc小组报告,但后来都被证明是不同硬件的问题,包括内存,cpu。后来就有人专门用它来检测硬件。
d.先进性:如果你认为c语言是一成不变的就错了。我们通常所说的ANSI C就是C标准,而课本里学的C其实是C77标准的子集。其后ISO又出版了C89,C95,C99。而C99包含对C语言一些弊端的最新修正,和对C语言功能和标准库的扩充的最新版。而据我所知,GCC-3.3是第一个真正开始支持C99标准的编译器。
e.多语言支持:gcc以单独模块的形式支持现在主流的编程语言:C,C++,FORTRAIN,ADA,PASCAL,JAVA。
|
gcc 的入门开发环境为 vim ,下面这片文章有简单介绍(要想完全掌握也不容易哟),包括编辑和编译等,定制编译你是指加入编译参数吗?用make makefile 命令会有很大帮助.
vim http://www.lslnet.com/linux/docs/linux-3266.htm
make http://www.chinaunix.net/bbsjh/12/1033.html
vim http://www.lslnet.com/linux/docs/linux-3266.htm
make http://www.chinaunix.net/bbsjh/12/1033.html