[转] Makefile中调用Shell

1、在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:

VAR="Hello"
echo "$(VAR)"

all:
   .....

以上代码任何时候都不会输出,没有在target内,如果上述代码改为如下:

VAR="Hello"

all:
    echo "$(VAR)"
    .....

以上代码,在make all的时候将会执行echo命令。

最后打印结果是:

echo ""Hello""

"Hello"

2、在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“;  \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行,例如:

SUBDIR=src example
all:
    @for subdir in $(SUBDIR);     do        echo "building ";     done

上述可以看出for循环中每行都是以”; \”结尾的。

3、Makefile中所有以$打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句位$),都需要加两个$符号($$)。实例如下:

PATH="/data/"

all:
    echo ${PATH}/*Makefile中变量,即"/data"*/
    echo $$PATH /*shell中的变量*/

例子中的第一个${PATH}引用的是Makefile中的变量,而不是shell中的PATH环境变量,后者引用的事Shell中的PATH环境变量。

以上三点的是Makefile调用shell应该注意的地方,写Makefile一定要注意。

时间: 2024-08-26 12:46:33

[转] Makefile中调用Shell的相关文章

makefile中的shell语法

在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码.eg:xx = xx1         // 这里时makefile代码yy:xx = xx2   // 这是是makefile代码,makefile允许变量赋值时,'='号两边留空格yy:    xx=xx3 // 只有这里是shell代码 ,shell不允许‘=’号两边有空格哦.

makefile中的shell编程注意点

参考:http://blog.csdn.net/wanglang3081/article/details/49423105 (1)Makefile本质上来讲也是shell脚本,即每条command都是shell进程,运行完shell进程都会退出.   (2)shell代码行,如果有=的话,=两边不能有空格   (3)Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递.所以,Makefile中的shell不管多长也要写在一行.可以用\来分行写,格式更清晰一点. SUBDIR

【转载】如何在C语言中调用shell命令

转载自:http://blog.csdn.net/chdhust/article/details/7951576 如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非常简单,这些shell命令的程序实现已经被底层实现好.有时候需要在程序中调用shell命令,这样可以就不用在控制台上手动输入shell命令了,下面就以三个函数为例来讲解如何在C语言中调用shell命令. 1.system(执行shell 命令) 相关函数 fork,execve,waitpid,po

[Python]在python中调用shell脚本,并传入参数-02python操作shell实例

首先创建2个shell脚本文件,测试用. test_shell_no_para.sh 运行时,不需要传递参数 test_shell_2_para.sh 运行时,需要传递2个参数  test_shell_no_para.sh 内容如下:  test_shell_2_para.sh内容如下 注意含有变量的字符串要用 双引号 括起来 直接在命令行运行 test_shell_2_para.sh 执行结果如下: [email protected]348-G4:~$ sh test_shell_2_para

在android程序中调用shell命令与脚本

最近做android的一个功能就是调用shell命令来进行一些系统级别的操作,比如说是关机开机之类的,现在总结一下具体的用法以及遇到的坑(基于我所用到的,没用到的我就不说了) (1) Runtime.getRuntime().exec("ls"); 这是最简单的一种,你输入后就能就会执行ls命令,如果要获得输出的话可以这样写 Process p = Runtime.getRuntime().exec("ls"); String data = null; Buffer

解析如何在C语言中调用shell命令的实现方法【转】

本文转自:http://www.jb51.net/article/37404.htm 1.system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程.在调用syst

[C]在C语言中调用shell命令

本文转自:http://www.jb51.net/article/37404.htm 1.system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程.在调用syst

qt中调用shell脚本并监控返回的方法

在QT中经常要调用外部命令或者是执行shell脚本,并且要对执行结果进行分析. QProcess runShellProcess =new QProcess(this); //调用过程输出的监控 connect(runShellProcess, SIGNAL(readyRead()), this, SLOT(readProcess())); connect(runShellProcess, SIGNAL(finished(int)), this, SLOT(finishedProcess()))

Makefile里调用Shell注意点

http://www.linuxidc.com/Linux/2012-04/59093.htm 大家经常编写和使用Makefile, Makefile里面也经常用到shell, 但对其中一些需要注意的地方未必会去留意, 这里列出几个来, 不知是否对大家有用.1. 注意Makefile的变量和shell变量, 看如下示例:    DIRS = src bin lib   all:    @for i in $(DIRS); /     do /         echo " " $$i;