简易makefile文件:
----------------------------start file ---------------------------------------------------------------------------
CC=gcc #定义编译器为gcc
RM = rm –f
INC = . #定义头文件目录
CFLAGS = -Wall -std=c99
LDFLAG = -L../lib -ltest -lmath #定义库文件目录 和 库文件
OBJ=HashTable.o
BIN=HashTable
all:$(BIN) #定义默认生成BIN 默认 make程序只更新makefile中的第一个目标,如果希望更新多个目标文件的话,可以使用一个特殊的目标all,假如我们想在一个makefile中更新main和hello这两个程序文件的话,可以加入下列语句达到这个目的: all:hello main
clean:tmpclean
tmpclean:
RM *.o
RM $(BIN)
#%.o:%.cpp 定义编译规则 HashTable.o依赖HashTable.c
%.o:%.c
$(CC) -I$(INC) $(CFLAGS) -c $<
#定义默认生成BIN规则
$(BIN):$(OBJ)
$(CC) $(CFLAGS) -o $(BIN) $(OBJ)
----------------------------end file ---------------------------------------------------------------------------
参数解释:
◆-I参数
-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了
否则报错:
"xxxx.h: No such file or directory"
◆-l参数和-L参数
l参数紧接是库名
L 是库路径
放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了 但如果用其他目录的库文件 则需要-L知 识目录
e.p.: libtest.so在/aa/bb/cc目录下 则我们需要链接参数:-L/aa/bb/cc -ltest
否则报错:
“/usr/bin/ld: cannot find -lxxx”
如果动态库为libXXX.so 我们用-lXXX 这种方式
如果不是的话yangcs.so-2.0.1 有点麻烦 通常我们这么干 搞个动态连接 ln -s libyang.so yangcs.so-2.0.1 最后在用-lyang方式
makefile的内部宏:
对“$^ $@ $<”参数的说明
%.o:%.c,那么$@表示xxx.o文件
$<表示第一个找到的.c文件
$^:代表所有的依赖文件 $@:代表目标 $<:代表第一个依赖文件
gcc -O0 -g3 -Wall -c -o src\c.o ..\src\c.c
gcc -o c.exe src\c.o
g++ -O0 -g3 -Wall -c -o src\cpp.o ..\src\cpp.cpp
g++ -o cpp.exe src\cpp.o