如何在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 打赏 收藏 转发到动态 举报
写回复
用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也是可以赋值的,直接赋值成需要的路径就可以了。
  • 打赏
  • 举报
回复
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也是有问题的,环境变量的传递是件麻烦事。也一样会有很多工作要做。嘿嘿。

19,610

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧