社区
系统维护与使用区
帖子详情
如何在makefile中以source 来运行一个shell脚本
lenghuo2002
2008-07-31 11:23:15
我想在makefile里运行一个shell脚本。由于需要改变工作路径所以该脚本只能以source方式才能成功。但是不知道怎么在makefile中调用该脚本。请大虾们指点!谢谢
我试验了下面的方式
all:
$(shell source sys/makebusybox.sh)
和
all:
. sys/makebusybox.sh
都是不行的。
...全文
4293
18
打赏
收藏
如何在makefile中以source 来运行一个shell脚本
我想在makefile里运行一个shell脚本。由于需要改变工作路径所以该脚本只能以source方式才能成功。但是不知道怎么在makefile中调用该脚本。请大虾们指点!谢谢 我试验了下面的方式 all: $(shell source sys/makebusybox.sh) 和 all: . sys/makebusybox.sh 都是不行的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lenghuo2002
2008-08-01
打赏
举报
回复
to micropentium6
你说的方法我也试过了,还是不行。
但是找到了问题所在了。原来问题出在一个patch文件中$(PWD)/../include
关键点在于$(PWD)得到的路径 是 执行 make 时的路径名,所以make -C 是不管用的。它不会得到make -C进入的那个路径名,才造成了找不到
include文件夹的问题而出错。也就是说你可以进入想编译的文件夹(比如busybox/)同级的其它文件夹,然后用make -C ../busybox 的方式也是可以正确
的编译的。
现在除了改patch文件还没想到别的方法,郁闷啊。
lenghuo2002
2008-08-01
打赏
举报
回复
怎么有两个回复看不到啊
lenghuo2002
2008-08-01
打赏
举报
回复
好歹想了个办法解决了
原来PWD也是可以赋值的,直接赋值成需要的路径就可以了。
小笨和漂向北方
2008-08-01
打赏
举报
回复
According to the make manual, have u tried to:
subsystem:
cd subdir && $(MAKE)
As the manual says: Recursive make commands should always use the variable MAKE, not the explicit command name 'make'
Let me know if it works
Thanks,
lenghuo2002
2008-07-31
打赏
举报
回复
多谢fuqd273的耐心。
第二种方法
ALL:
cd subdir1 && make
cd subdir2 && make
试了和make -C 是完全等价的,行不通。
include的方法很容易和其他的makefile目标文件和变量冲突,个人觉得不太好
看来我还是试试用一个顶层的shell来解决吧。就是不太甘心,make这么个好东西咋就不能支持source呢。。。
fuqd273
2008-07-31
打赏
举报
回复
第三种办法:
把所需要的makefile文件用include包含进来就可以了
fuqd273
2008-07-31
打赏
举报
回复
。。。
写一个顶层的shell不是一样执行N个makefile么?
或者:
详细写是这样:
ALL:
cd subdir1 && make
cd subdir2 && make
注意前边是tab,不是空格。
lenghuo2002
2008-07-31
打赏
举报
回复
不是,我还有一大堆别的makefile要执行啊。我是要写一个顶层的makefile来完成所有的工作啊。
fuqd273
2008-07-31
打赏
举报
回复
照你说的,用shell来执行make不就行了?
还需要你自己来写makefile?configue不是都完成了么。
lenghuo2002
2008-07-31
打赏
举报
回复
我是编译busybox,子makefile是./configure 自动生成的。
最关键的是这个子makefile用 make -C 的方式是不行的。(不知道为什么这么变态)必须进入到底层目录才能直接用make编译
所以才想用shell脚本来实现。
fuqd273
2008-07-31
打赏
举报
回复
要改什么工作路径?
做一个子makefile不就好了?
make命令man一下看看。
make 和shell不是一个命令,可能有些内部命令形式一样,本质上还是不同的。别搞混了。
fierygnu
2008-07-31
打赏
举报
回复
makefile里cd busybox后边应该用&&,否则就是两个shell在执行。
把-f makefile去掉能执行吗?具体的错误信息什么样?
lenghuo2002
2008-07-31
打赏
举报
回复
再说详细一点吧,
如果在makefile中写
cd busybox ; make #会提示错误
但是在同一个工作目录下在shell命令行中以source运行下面的脚本
cd busybox
make
是可以正确完成编译的。
我感觉就是因为make -C的时候路径的变化和用source方式改变路径是不一样的。
lenghuo2002
2008-07-31
打赏
举报
回复
恩,会报错的
fierygnu
2008-07-31
打赏
举报
回复
在shell里执行make -C busybox -f makefile报错吗?
lenghuo2002
2008-07-31
打赏
举报
回复
不知道为什么不行啊。用make -C的时候就提示一些头文件里的变量没有定义,其实是声明了的外部变量。
比方说
make -c busybox -f makefile
执行会出错
但是在shell中输入
cd busybox
make
就可以正常的编译了。不知道是什么原因。
fierygnu
2008-07-31
打赏
举报
回复
能不能说一下make -C为什么不行?
fuqd273
2008-07-31
打赏
举报
回复
make本身是好的
但是要做顶层makefile的话,就要把子makefile都规划好了才行。
随便把几个不相干的makefile丢一起是不行的。
source...
shell里面的source也是有问题的,环境变量的传递是件麻烦事。也一样会有很多工作要做。嘿嘿。
在
Makefile
中
source
脚本
在
Makefile
中
source
脚本
在做项目时,通常会用到
Makefile
,并且很多
脚本
数可以重复使用。因此,若在
Makefile
中
source
已有的
脚本
,则方便很多。 然而直接在
Makefile
中使用
source
XX.sh,则terminal显示“make :
source
:command not found”。一脸懵逼呀!在terminal中输入
source
xx.sh,正常
运行
。接下来针对此问题提出解决方法。 原因:
makefile
的默认
shell
是/bin/sh,本身不支持
source
。 方法:
ubuntu:在
makefile
中
source
一个
脚本
source
是
一个
bash 内置命令,man bash 然后找到
SHELL
BUILTIN COMMANDS 部分。而
Makefile
要执行的话必须是能 fork 出进程的,所以无法执行。
makefile
的默认
shell
是/bin/sh,本身不支持
source
可以将
shell
切换成/bin/csh来支持
source
在
makefile
中
source
一个
脚本
makefile
的默认
shell
是/bin/sh,本身不支持
source
可以将
shell
切换成/bin/csh来支持
source
如下所示: #
Makefile
SHELL
:= /bin/csh rule:
source
env.sh && YourCommand
Shell
脚本
、
Makefile
目录
shell
脚本
shell
和
shell
脚本
简介基本使用变量:
Shell
运算符
Shell
中的字符串
Shell
的数组:printf函数:
Shell
的循环语句
Makefile
简介make关于程序的编译和链接编写
shell
脚本
Shell
Script ,
Shell
脚本
与Windows/Dos下的批处理相似,也就是用各类命令预先放入到
一个
文件中,方便一次性执行的
一个
程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux
Makefile
中添加
shell
脚本
Makefile
中可以加入
shell
脚本
语言,但是编写形式不一样,
Makefile
中都是以行为单位的,所以必须将
Makefile
中的
shell
脚本
通过\ 连接成一行。 例如: if [ -d $(HISI_HOME)/src/sdk_modify/hidrv_v0A1/
source
/osdrv/kernel/linux-2.6.35 ]; then \ cp -rf $(HISI_HOME)
系统维护与使用区
19,610
社区成员
74,604
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章