了解
Linux
下的
C
语言编程的基本常?/p>
1.
源程序的编译?/p>
Linux
下面
,
如果要编译一?/p>
C
语言源程?/p>
,
我们要使?/p>
GNU
?/p>
gcc
编译?/p>
.
下面我们以一个实例来说明如何使用
gcc
编译?/p>
.
假设我们有下面一个非?/p>
简单的源程?/p>
(hello.c):int main(int argc,char **argv)
{ printf("Hello Linux\n");
}
要编译这
个程?/p>
,
我们只要在命令行下执?/p>
:gcc
-o
hello
hello.cgcc
编译器就会为我们生成一?/p>
hello
的可执行文件
.
执行
./hello
就可以看到程序的输出结果?/p>
.
命令行中
gcc
表示我们是用
gcc
来编译我们的源程?/p>
,-o
选项表示我们要求编译器给我们输出的可执行文件名为
hello
?/p>
hello.c
是我们的源程序文?/p>
.gcc
编译器有许多选项
,
一般来说我们只要知道其中的几个?/p>
够了
.
-o
选项我们已经知道?/p>
,
表示我们要求输出的可执行文件?/p>
.
-c
选项表示我们只要?/p>
编译器输出目标代?/p>
,
而不必要输出可执行文?/p>
. -g
选项表示我们要求编译器在编译的时?/p>
提供我们以后对程序进行调试的信息
.
知道了这三个选项
,
我们就可以编译我们自己所写的
简单的源程序了
,
如果你想要知道更多的选项
,
可以查看
gcc
的帮助文?/p>
,
那里有着许多对其
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
.2.Makefile
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
一
?/p>
?/p>
?/p>
,
?/p>
?/p>
?/p>
?/p>
?/p>
:/*
main.c
*/
?/p>
i
nclude
"mytool1.h"
?/p>
i
nclude
"mytool2.h"int
main(int
argc,char
**argv) {
mytool1_print("hello");
mytool2_print("hello"); }/*
mytool1.h
*/ #ifndef
_MYTOOL_1_H #define
_MYTOOL_1_Hvoid
mytool1_print(char
*print_str);#endif/*
mytool1.c
*/
?/p>
i
nclude
"mytool1.h" void
mytool1_print(char
*print_str) {
printf("This
is
mytool1
%s\n",print_str); }/*
mytool2.h
*/ #ifndef
_MYTOOL_2_H #define
_MYTOOL_2_Hvoid
mytool2_print(char
*print_str);#endif/*
mytool2.c
*/
?/p>
i
nclude
"mytool2.h" void
mytool2_print(char
*print_str) {
printf("This is mytool2 print %s\n",print_str); }
当然由于这个程序是很短的?/p>
们可以这样来编译
gcc
-c
main.c gcc
-c
mytool1.c gcc
-c
mytool2.c gcc
-o
main
main.o
mytool1.o mytool2.o
这样的话我们也可以产?/p>
main
程序
,
而且也不时很麻烦
.
但是如果我们
考虑一下如果有一天我们修改了其中的一个文?/p>
(
比如?/p>
mytool1.c)
那么我们难道还要?/p>
新输入上面的命令
?
也许你会?/p>
,
这个很容易解决啊
,
我写一?/p>
SHELL
脚本
,
让她帮我去完?/p>
不就可以?/p>
.
是的对于这个程序来说
,
是可以起到作用的
.
但是当我们把事情想的更复杂一?/p>
,