使用QMake

时间:2016-02-08 12:06:47

标签: qt makefile qmake

我有一个带有共享库的几个应用程序的项目设置,这些都是使用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

2 个答案:

答案 0 :(得分:0)

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

  

-rpath = DIR
  将目录添加到运行时库搜索路径。这是用的   将ELF可执行文件与共享对象链接时。所有-rpath
  参数被连接并传递给运行时链接器,其中包含   使用它们在运行时找到共享对象。

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

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

答案 1 :(得分:0)

在Qt 5.5中,以下qmake语句为目标$$TOP_BUILDDIR/sharedLib/release添加LD_LIBRARY_PATHcheck的路径:

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。< / p>