linux 环境编程学习笔记 第六天 make与makefile,环境变量


寒假学习 第六天 (linux 高级编程) 笔记 小结

一、make与makefile



makefile列子
OBJ=add.o sub.o

add.o:add.c
	gcc add.c -c -fpic
sub.o:sub.c
	gcc sub.c -c -fpic
libku2.so:$(OBJ)
	gcc -shared -olibku2.so $(OBJ)
main:main.c libku2.so
	gcc main.c -ldl -omain
.PHONY:clean
clean:
	rm -f *.o *.so main
 

目标的语法

目标名:依赖目标
        @命令      前面一定是【tab】  不能是空格 
        @命令      加@表示不显示 信息
 
OBJ=add.o sub.o          设置变量
$(OBJ)  或者 ${OBJ}     使用变量
.PHONY : clean             表示不把clean当成文件处理,声明伪目标
 
 
 

make的命令行使用

make -f make脚本文件  目标名
 
不加 目标名  默认 第一个目标
不加脚本文件 默认 makefile 文件或者 Makefile文件(makefile优先)

目标的调用规则

搜索与目标相同的文件
如果文件存在,则判定日期跟后面的比较。
如果与目标同名文件日期最新,则停止执行,输出提示
不是最新,则进行执行。
(不存在表示就最新)
 

在写makefile时最好
只要有文件输出,就把任务作为一个目标
并且把输出的文件作为目标名。
 

潜规则

.c目标与.o目标
查找.o目标,目标不存在,就把.o替换成.c
如果.c存在,实施潜规则:直接调用gcc把.c执为.o
 
例如:
当只有  xxx.c  时
直接 make  xxx
就会 执行  cc     xxx.c   -o xxx
 

二、环境变量

1.用arge

int main(int args,char **argv,char **arge)
{
  return 0;
}
 
args  表示 后面跟的参数的个数
argv  表示 参数的名字
arge  表示环境变量
 
 
这是一种获取环境变量的方式
 
另一种方式使用  environ

2.使用  environ

 
extern char **environ;
 
#include<stdio.h>

extern **environ;

int main()
{
  while(*environ)
  {
    printf("%s\n",*environ);
    ++environ;
  }
  return 0;
}

3.用 getenv/setenv/unsetenv

需要头文件stdlib.h
 
char *getenv(const char *name);
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);
 
getenv 所获取的指针是不可以 free 的