社区
系统维护与使用区
帖子详情
如何在makefile中以source 来运行一个shell脚本
lenghuo2002
2008-07-31 11:23:15
我想在makefile里运行一个shell脚本。由于需要改变工作路径所以该脚本只能以source方式才能成功。但是不知道怎么在makefile中调用该脚本。请大虾们指点!谢谢
我试验了下面的方式
all:
$(shell source sys/makebusybox.sh)
和
all:
. sys/makebusybox.sh
都是不行的。
...全文
4714
18
打赏
收藏
如何在makefile中以source 来运行一个shell脚本
我想在makefile里运行一个shell脚本。由于需要改变工作路径所以该脚本只能以source方式才能成功。但是不知道怎么在makefile中调用该脚本。请大虾们指点!谢谢 我试验了下面的方式 all: $(shell source sys/makebusybox.sh) 和 all: . sys/makebusybox.sh 都是不行的。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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也是有问题的,环境变量的传递是件麻烦事。也一样会有很多工作要做。嘿嘿。
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)
Makefile
之使用
shell
命令,以及
shell
命令不包含
source
命令
比如我们想要在
makefile
中写
脚本
去执行
shell
的ls命令看一下文件有没有生成,可以这样用。
系统维护与使用区
19,620
社区成员
74,588
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章