1.源程序的编译
/* main.c */
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print("hello");
}
/* mytool1.h */
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
/* mytool1.c */
#include "mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s\n",print_str);
}
/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif
/* mytool2.c */
#include "mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s\n",print_str);
}
手动编译:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
Makefile SHell 文件编译
1 #main:main.o mytool1.o mytool2.o
2 gcc -o main main.o mytool1.o mytool2.o
3 #main.o:main.c mytool1.h mytool2.h
4 gcc -c main.c
5 #mytool1.o:mytool1.c mytool1.h
6 gcc -c mytool1.c
7 #mytool2.o:mytool2.c mytool2.h
8 gcc -c mytool2.c
9
10 #格式:第一行表示的是依赖关系,第二行是规则
11 #比如main:main.o mytool1.o mytool2.o 表示目标main的依赖
12 #对象是main.o mytool1.o mytool2.o
13 #Makefile 有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:
14 #$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件.
15 #简化到Makefile如下:
16 # main:main.o mytool1.o mytool2.o
17 # gcc -o $@ $^
18 # main.o:main.c mytool1.h mytool2.h
19 # gcc -c $<
20 # mytool1.o:mytool1.c mytool1.h
21 # gcc -c $<
22 # mytool2.o:mytool2.c mytool2.h
23 # gcc -c $<
2.程序库的链接
对于一些常用的函数的实现,gcc
编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了. 有时候我们在编译程
序的时候还要指定库的路径,这个时候我们要用到编译器的 -L 选项指定路径.比如说我们有
一个库在 /home/hoyt/mylib 下,这样我们编译的时候还要加上 -L/home/hoyt/mylib.对于一些
标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库
的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径.
对于数学库<math.h>引用,程序进行链接的时候用加-lm
gcc -o temp temp.c -lm
3.函数帮助
如果想知道函数的大概形式,用man fread.
当该函数与命令名相同是 用man 2 write 查看函数说明
Linux下C的编译和链接
最新推荐文章于 2024-07-29 12:42:44 发布