我有一个带有几个带有共享库的应用程序的项目设置,所有这些都使用SUBDIRS项目很好地构建,其中应用程序依赖于共享库。

TEMPLATE = subdirs
SUBDIRS = app1 app2 sharedLib
app1.depends = sharedLib
app2.depends = sharedLib

每个应用程序还包含许多测试,并设置了CONFIG += testcase

这将创建一个check目标,因此我们可以使用make check从顶级.pro运行所有单元测试。

问题在于某些应用程序测试要求sharedLib中存在代码,因此需要根据每个平台库查找规则来发现它。

在Windows上,一种选择是在PATH上具有sharedLib位置,在Linux上,我们可以在mac LD_LIBRARY_PATH上将sharedLib位置添加到DYLD_LIBRARY_PATH中。

一种解决方案是只在运行make check之前设置构建的共享库的位置:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:build/sharedDll/
make check

虽然可以,但是似乎有点多余,因为构建共享脚本本身是在构建共享库,因此他们知道sharedLib二进制位置的路径,可以从.pro/pri文件中的以下位置引用该路径:
$$TOP_BUILDDIR/sharedLib/release

因此,是否有必要针对PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH命令从项目文件中设置make check

最佳答案

如果使用的是gcc,则可以使用gcc的rpath参数。



QMAKE_CXXFLAGS + = -rpath =/the/absolute/path

如果您使用该技术,则无需编辑LD_LIBRARY_PATH

10-06 10:32