寒假学习 第六天 (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 的
寒假学习 第六天 (linux 高级编程)
原文:http://blog.csdn.net/billvsme/article/details/18567233