1、关于CFLAGS
CFLAGS 表示用于 C 编译器的选项,
CXXFLAGS 表示用于 C++ 编译器的选项。
今天在一个项目改用C++编译后,makefile编译一直不成功,研究发现是没有使用CXXFLAGS.
2、make传递参数
test=11
test1:
echo $(test)"-this is test1"
test2:
echo $(test)"-this is test2"
执行结果
# make
echo 11"-this is test1"
11-this is test1
# make test1
echo 11"-this is test1"
11-this is test1
# make test2
echo 11"-this is test2"
11-this is test2
# make test="new"
echo new"-this is test1"
new-this is test1
3、明明使用g++交叉编译器,但一直提示g++编译
箭头处用cpp
4、makefile 执行顺序
make的执行过程如下:
- 依次读取变量“MAKEFILES”定义的makefile文件列表
- 读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)
- 依次读取工作目录makefile文件中使用指示符“include”包含的文件
- 查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)
- 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
- 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
- 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
- 执行“终极目标”所在的规则
5、makefile $@ $^ $<
$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表