2016-02-08 103 views
6

我有一个带有一个共享库的应用程序的项目设置,这一切都使用SUBDIRS项目很好地构建,应用程序依赖于共享库。使用QMake为'make check'设置PATH/LD_LIBRARY_PATH

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

每个应用程序还包含一些测试,其中CONFIG += testcase设置。

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

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

在Windows上,一个选项是在PATH上有sharedLib位置,在linux上我们可以将sharedLib位置添加到LD_LIBRARY_PATH,在mac 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为宗旨s的make check命令?

回答

0

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

-rpath = DIR
           添加目录到运行库搜索路径。这是连接与共享对象ELF可执行文件时使用
           。所有-Rpath
           参数是级联,并传递给运行时接头,其
           使用它们在运行时查找共享对象。

QMAKE_CXXFLAGS + = -rpath = /的/绝对/路径

如果使用该技术,它不会需要编辑LD_LIBRARY_PATH

0

在Qt 5。5,下列QMAKE声明前添加路径$$TOP_BUILDDIR/sharedLib/releaseLD_LIBRARY_PATH目标check

check.commands = LD_LIBRARY_PATH=$$TOP_BUILDDIR/sharedLib/release:\$$LD_LIBRARY_PATH $$check.commands 

我汲取灵感该解决方案从文件testcast.prfqt_functions.prf(尤其是功能qtAddTargetEnv()qtAddToolEnv()),均位于$$[QT_INSTALL_PREFIX]/mkspecs/features