我有一个带有共享库的几个应用程序的项目设置,这是使用SUBDIRS项目很好地构建的,其中应用程序依赖于共享库.
TEMPLATE = subdirs
SUBDIRS = app1 app2 sharedLib
app1.depends = sharedLib
app2.depends = sharedLib
Run Code Online (Sandbox Code Playgroud)
每个应用程序还包含许多测试,包括CONFIG += testcaseset.
这创建了一个check目标,因此我们可以使用顶层.pro运行所有单元测试make check.
问题是某些应用程序测试需要在sharedLib中存在代码,因此需要根据每个平台库查找规则来发现它.
在Windows上,一个选项是PATH在linux 上有sharedLib位置,我们可以LD_LIBRARY_PATH在mac上添加sharedLib位置DYLD_LIBRARY_PATH.
一种解决方案是在运行之前设置构建的共享库的位置make check:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:build/sharedDll/
make check
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它似乎有点多余,因为构建脚本本身正在构建共享库,因此他们知道sharedLib二进制位置的路径,可以从.pro/pri文件中引用:
$$TOP_BUILDDIR/sharedLib/release
Run Code Online (Sandbox Code Playgroud)
那么,无论如何都要PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH在项目文件中为make check命令的目的设置?
如果您使用gcc,则可以使用gcc的rpath参数。
-rpath=dir
将目录添加到运行时库搜索路径。
当将 ELF 可执行文件与共享对象链接时使用。所有 -rpath
参数都连接起来并传递给运行时链接器,后者
使用它们在运行时定位共享对象。
QMAKE_CXXFLAGS += -rpath=/the/absolute/path
如果您使用该技术,则无需编辑 LD_LIBRARY_PATH
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |