使用Waf查找本地外部库

Finding local external libraries with Waf

本文关键字:外部 Waf 查找 使用      更新时间:2023-10-16

我正在创建一个wscript文件,该文件能够链接存储在项目目录中的外部库,而不是安装到系统中,但我不确定这样做的最佳方式。

目前,我正在沿着以下路线做一些事情:

cfg.env.INCLUDES_A = [os.path.normpath('external/include')]
cfg.env.LIBPATH_A  = [os.path.normpath('external/win32/A/lib/x64')]
cfg.env.LIB_A      = ['A']
cfg.env.append_unique('COPY_LIBS', os.path.normpath('external/win32/A/lib/x64/A.dll'))

在这种情况下,我链接到A.lib的本地副本,然后在代码中标记要复制到我的安装目录(本地"dist"目录)的A.dll。然而,我知道对于安装到您的系统中的库,您可以按照以下方式做更多的事情:

cfg.check_cxx(uselib_store="GL", stlib="opengl32")

我想,我的问题是:有没有一种方法可以用本地存储的外部库做类似的事情?可能是某种check_cxx(libpath="external/blah", ...)或类似的东西?

您可以使用read_shlibread_stlib

你可以这样使用它:

bld.read_shlib('opengl32', paths='external/blah')

我找到并正在使用的解决方案是:

cfg.env.LIBPATH.append(os.path.join(os.getcwd(), "external_lib_dir")
cfg.env.INCLUDES.append(os.path.join(os.getcwd(), "external_includes_dir")

然后,搜索库可以像一样简单

# OpenGL
if not cfg.check_cxx(uselib_store='GL', uselib='CORE TEST', mandatory=False, lib='GL'):
    cfg.check_cxx(uselib_store='GL', uselib='CORE TEST', mandatory=True, lib='opengl32')

第一行将进行在大多数linux系统上有效的检查,设置为非强制性的,这样它就不会失败;第二行将执行在windows上有效的检测,设置为强制性的,所以两个失败都会导致配置失败。

这种方式对我来说效果很好,如果需要的话,可以做得更健壮一点(为osx框架或类似的东西添加检测),但如果有人知道更好的方法,请告诉我!

编辑:很明显,您可能不会将OpenGL保存在项目的本地目录中,但将其更改为与其他库一起使用也不错。