使用ruby rake查找动态/共享和静态系统库

时间:2013-12-06 04:07:41

标签: c++ ruby rake libraries

我正在尝试编写一个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)。

1 个答案:

答案 0 :(得分:0)

经过一番思考后,似乎我对用户当前的操作系统过于具体,而我真正想要确定的一直是用户系统支持的功能......我最终使用的方法是确定可能的前缀/后缀组合的列表,并检查每个组合。