make -C dir
和make -f filename
的区别
-C 选项
Makefile中-C
是递归调用子目录中的Makefile,-C
选项后跟目录,表示到子目录下执行子目录的Makefile,顶层Makefile中的export的变量
还有make默认的变量
是可以传递给子目录中的Makefile的。
-f 选项
顶层Makefile使用make -f
调用子目录中的文件(文件名可以随意,不一定用Makefile作为文件名)
作为Makefile,顶层Makefile中的export的变量
也可以传递变量到底层目录,另外在命令行中加入变量赋值选项,将覆盖顶层Makefile中export的变量。
但是,经测试,在顶层Makefile中使用 -f
选项,例如 make -f ./xxx/xx/build.mk
此时make命令的工作目录仍然是顶层目录,即CUDIR变量
依然是 ./目录
而不是 ./xxx/xx/目录
。
#:~/test$ cat make/Makefile
MM:
@echo `pwd`
@echo $(CURDIR)
#:~/test$
#:~/test$ make -C make
make: Entering directory '/home/j30022395/test/make'
/home/j30022395/test/make
/home/j30022395/test/make
make: Leaving directory '/home/j30022395/test/make'
#:~/test$
#:~/test$ make -f make/Makefile
/home/j30022395/test
/home/j30022395/test
#:~/test$
-
Makefile中调用函数的方法:
$(call 要调用的函数,函数的参数)
。 -
CURDIR 变量
CURDIR
是 Makefile 中的一个变量:表示当前目录下。
在 Makfile 中使用$(CURDIR)
-
export 和 unexport
如果你要传递变量到下级 Makefile 中,那么你可以使用这样的声明:export <variable ...>
如果你不想让某些变量传递到下级 Makefile 中,那么你可以这样声明:unexport <variable ...>
-
make -s
中-s
选项
1、如下的Makefile:
mytest:
echo CURDIR = $(CURDIR)
echo MAKE_VERSION = $(MAKE_VERSION)
2、make
执行结果:
jl@jl-virtual-machine:~/test$ make
echo CURDIR = /home/jl/test
CURDIR = /home/jl/test
echo MAKE_VERSION = 4.1
MAKE_VERSION = 4.1
jl@jl-virtual-machine:~/test$
3、make -s
执行结果:
jl@jl-virtual-machine:~/test$ make -s
CURDIR = /home/jl/test
MAKE_VERSION = 4.1
jl@jl-virtual-machine:~/test$
make -s 不打印make执行指令本身,但是 echo 的话会打印执行结果,一般类似于删除、编译这些操作是不会有log产生的
4、类似于用 make 执行如下的 Makefile:
mytest:
@echo CURDIR = $(CURDIR)
@echo MAKE_VERSION = $(MAKE_VERSION)
-
make -f 其它目录的一个Makefile
就相当于将这个其它目录的一个Makefile
,cpoy到当前目录下,执行 make -
添加1个
FORCE
伪目标,每次编译的时候都会强制重新编译。
PHONY += FORCE
FORCE: