将scons生成过程包装到Makefile中
我已经写了一个将scons生成过程包装到Makefile中,makefile,scons,Makefile,Scons,我已经写了一个sconsbuild chain form一个小小的C项目,但是我担心用户不会喜欢被告知“你应该先安装scons。此外,它真的很酷!”(尤其是我的教授,因为他有点像老守卫) 有没有一种方法可以设置一个打包SCON的Makefile,而不需要将其安装在目标系统上?在前一段时间寻找了这样的解决方案后,我最终为此编写了一个Makefile 因为SCons也是一个drop-in-userspace包SCons-local(请参阅),所以可以获取并运行它。这里是我的Makefile的一个经过
scons
build chain form一个小小的C项目,但是我担心用户不会喜欢被告知“你应该先安装scons。此外,它真的很酷!”(尤其是我的教授,因为他有点像老守卫)
有没有一种方法可以设置一个打包SCON的Makefile,而不需要将其安装在目标系统上?在前一段时间寻找了这样的解决方案后,我最终为此编写了一个Makefile 因为SCons也是一个drop-in-userspace包
SCons-local
(请参阅),所以可以获取并运行它。这里是我的Makefile的一个经过剖析和注释的版本,我也将其作为一个文件上传
↑ 默认操作取决于scons
是否可用,只需运行scons命令(稍后在脚本中设置)(@
符号阻止make打印命令)
↑ 设置获取tarball的规则,并将其解压缩到scons local
目录中
NATIVE_SCONS=$(strip $(shell which scons 2>/dev/null))
ifeq ($(NATIVE_SCONS),)
SCONS_EXE=python2 ./scons-local/scons.py
get_scons: scons-local
@echo "Couldn't find an installation of SCons, using a local copy"
else
SCONS_EXE=$(NATIVE_SCONS)
get_scons:
@echo "Found SCons installation at $(SCONS_EXE)"
endif
↑ 在搜索路径中查找scons
可执行文件(使用which
命令):如果可用,设置get scons
目标,以便在可用时简单打印。如果不可用,则创建get scons
目标,指示其依赖于前面定义的scons local
目标
clean:
$(SCONS_EXE) -c
rm -rf scons-local
rm -f scons-local-*.tar.gz
.PHONY: all clean get_scons
↑ 最后,设置clean
目标,该目标将委托给SCON并随后删除本地安装。.PHONY
规则告诉make
以下规则与正在创建的文件不对应
此时,可以添加更多此类代理规则:
mytarget: get_scons
@$(SCONS_EXE) mytarget
它将调用具有相应目标的SCON
希望这是有用的,如果有什么不对劲,请随时纠正我(我实际上不是Makefile专家,我正试图通过使用SCons来避免成为专家:p)
clean:
$(SCONS_EXE) -c
rm -rf scons-local
rm -f scons-local-*.tar.gz
.PHONY: all clean get_scons
mytarget: get_scons
@$(SCONS_EXE) mytarget