寒假学习 第六天 (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
如果.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; }
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);
int unsetenv(const char *name);
getenv 所获取的指针是不可以 free 的