我正在尝试编写一个rake任务,可以在用户系统上为特定系统库执行引导式搜索。基本思想很简单(半伪代码):
def find_lib names, paths
foreach name, path do
return { :name => name, :path => path } if File.exists? File.join(path, name)
end
return false
end
find_lib ['mylib1.2', 'mylib12'], ['/usr/lib', '/usr/local/lib']
我的实际实现更优雅,但这显示了基本的想法。但是,我想让这个操作系统不可知,这会给齿轮带来几个大扳手。每个操作系统都有可能不同的库前缀和扩展名。例如,共享库可以是“.dll”,“。so”或“.dylib”,具体取决于当前系统。到目前为止,我已经提出了一个解决方案,涉及构建基于前缀/扩展的映射在当前的操作系统上:
settings = {}
settings[:dylib_ext] = OS.windows? && ".dll" ||
OS.mac? && ".dylib" ||
".so"
这在某种程度上起作用,虽然它只涵盖动态库案例,并且还依赖于外部宝石“OS”,我试图避免这种情况。
有没有人知道更好的方法来完成这样的任务,或者它是否是一个已解决的问题(也许是通过另一个宝石)?我关心的主要问题是地图,这可能会变得非常繁琐(更不用说检测正确的操作系统是最乏味的,特别是如果你要投入cygwin或mingw)。
答案 0 :(得分:0)
经过一番思考后,似乎我对用户当前的操作系统过于具体,而我真正想要确定的一直是用户系统支持的功能......我最终使用的方法是确定可能的前缀/后缀组合的列表,并检查每个组合。