makefile 多行注释_makefile 如何注释_makefile注释(4)

电脑杂谈  发布时间:2017-04-11 05:09:03  来源:网络整理

其中-C表示改变当前目录,make的命令选项可通过make -h查看。

如果想对子目录的进行make clean,该怎么做呢?

同理,进入相应的子目录之后再进行make clean,命令如下:

make clean -C  $(SUBDIR) -f makefile

makefile中调用shell脚本:

如果稍微复杂一点,还可以使用循环进入多个子目录进行make clean。这里需要在makefile中嵌入shell脚本,makefile参考代码如下:

SUBDIRS=subdir1 subdir2 subdir3

RECURSIVE_CLEAN=for subdir in $(SUBDIRS);\
    do\
        echo cleaning in $${subdir};\
    (cd ${subdir} && $(MAKE) clean -f makefile)||exit 1;\
    done
.PHONY: clean
clean:
    $(RECURSIVE_CLEAN)

阅读以上代码,注意如下几点:

(1)shell脚本中,分号是多个语句之间的分隔符号,当一行只有一条语句的时候,末尾无需分号,当然加了也没错。

那么如何将shell的for循环写成一行呢?将shell的for循环写在一行的情况如下:

#分行写for循环
array=("lvlv0" "lvlv1") #定义数组
for dir in ${array[@]}
do
    echo $dir
done
echo "end"

#for循环写成一行的形式
array=("lvlv0" "lvlv1") #定义数组
for dir in ${array[@]};do echo $dir;done;echo "end"

将for循环写成一行时,do后面需要有空格符或者tab符号以示分割。如果done后面还有语句的话,需要再加上分号。

(2)当makefile内嵌shell脚本时,makefile中每一行的shell脚本需要一个shell进程来执行,不同行之间变量值不能传递。所以,makefile中的shell不管多长也要写在一行。因此,多行的shell需要在makefile使用连接符“\”连接为一行。此时,shell脚本中的一条语句后需要需要添加分号作为分隔。

(3)makefile中的变量需要通过$(variableName)或者${variableName}来引用。shell脚本中变量的引用方式是$variableName和${variableName},不能通过$(variableName)来引用。但是如果将shell脚本嵌入makefile中,引用shell变量,则需要$$来引用,即$${variableName}或者$$variableName。

(4)makefile中在对一些简单变量的引用,我们也可以不使用“()”和“{}”来标记变量名,而直接使用$x的格式来实现,此种用法仅限于变量名为单字符的情况。另外自动化变量也使用这种格式。对于一般多字符变量的引用必须使用括号了标记,否则make将把变量名的首字母作为作为变量而不是整个字符串($PATH在makefile中实际上是$(P)ATH)。

(5)makefile中嵌入shell脚本时,要 shell脚本被执行,必须将shell脚本写在target里才有效,其它地方都被忽略掉了。考察如下makefile 代码:

if [ "$(BUILD)" = "debug" ]; then  echo "build debug"; else echo "build release"; fi
all:
    echo "done"


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40643-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...