使用Waf查找本地外部库
Finding local external libraries with Waf
我正在创建一个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_shlib
和read_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保存在项目的本地目录中,但将其更改为与其他库一起使用也不错。
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 具有外部"c"和程序集的未定义函数
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 在C++中使用 gRPC 时未解析的外部符号
- 在类函数中初始化外部作用域变量
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 调用外部函数,无法指定类型 C++/MVS
- 使用Waf查找本地外部库
- 链接Waf目标到由外部构建系统(CMake)生成的库