我有一个Makefile,我试图创建一个规则来构建RPM,如果它们不存在(基于查看特定目录),否则只需将这些RPM复制到其他目录。 / p>
基本上我想做的是:
if somedir/build does NOT has RPMs:
somedir/build.sh
cp -R somedir/build/* destination
我一直在使用$(shell if [[ -d somedir/build ]] ....)
但没有太多运气。
答案 0 :(得分:0)
这是有效的:
someproject_rpms:
@if [[ -d somedir/build ]] ; then \
count=$$(find somedir/build -name "*.rpm" -type f | wc -l); \
if [[ $$count -eq 0 ]]; then \
$$(cd somedir && ./build.sh); \
fi \
else \
$$(cd somedir && ./build.sh); \
fi; \
find somedir/build -name "*.rpm" -type f -exec cp {} somedestination \;
不是最漂亮的,但它确实有效。
答案 1 :(得分:0)
您应该使用所谓的“哨兵”文件。这些是空文件,仅用于其时间戳,时间戳表示某些操作的完成,通常会创建一堆其他文件,我们可能知道也可能不知道。名为rpms
的两个文件是sentinel文件,这是您的解决方案Makefile
:
destination/rpms: somedir/build/rpms Makefile
find $(<D) -name *.rpm -exec cp {} $(@D) \;
touch $@
somedir/build/rpms: $(PACKEES) Makefile
somedir/build.sh
touch $@
PACKEES
现在是空的,但你应该将它设置为你想要打包到任何rpms中的所有文件,换句话说,就是build.sh
读取的所有文件。如果你坚持使用一个build.sh
脚本一次构建所有的rpms(这不是一个好主意),上面的是你将得到的最好的东西:)