qmake检查库

时间:2014-03-06 23:32:36

标签: c++ qt qt4 qmake googletest

我有一个qt项目设置作为一个子目录项目,我的源代码在一个src目录中,单元测试代码设置在一个测试目录中。每个都有自己的项目文件。我希望能够在其他计算机上编译源代码,但他们可能没有设置googletest库。我查看了qmake测试函数“requires()”和“packagesExist()”但是,它们似乎不是为了处理外部库而构建的。

如果找不到测试库,如何指示qmake跳过测试项目?

2 个答案:

答案 0 :(得分:1)

如果库中存在库,则无法检查典型位置。

不幸的是,googletest似乎也没有提供package-config“.pc”文件,所以这就是你不能使用packagesExist() qmake函数的原因。

所以,我会使用一堆exist调用来解决这个问题,或者从qmake切换到更像cmake的更好的东西。

!exists("/foo/bar/baz.so"):!exists("/hello/world/baz.so"):...: message("Google test is not installed on your system")

答案 1 :(得分:1)

如果您尝试链接的库没有pkgconfig信息,则可以使用qtCompileTest()为每个库进行qmake配置测试。我将在这里向您展示如何使用qmake的这个功能。

qtCompileTest qmake配置测试将在qmake时运行。如果测试编译,config_将被添加到CONFIG变量,qmake将打印Checking for <testname>... yesChecking for <testname>... no,具体取决于测试是否已编译。

在你的项目目录中,创建一个名为config_tests的目录,然后在其下创建一个你要测试的库或功能的目录,一个简单的qmake项目和main.cpp文件,最终结果如下:

myproject/
  myproject.pro
  <source files, etc>
  config_tests/
    googletest/
      googletest.pro
      main.cpp

让googletest项目非常简单,只需将可执行文件链接到googletest库,并测试包含使用它的必要标题。将此项目直接加载到Qt Creator中并测试它实际编译在您希望它工作的场景中,而不是在其他场景中(即测试您将使用的包含且不包含googletest库的各种平台)< / p>

接下来,通过将以下内容添加到项目顶部,在主项目中使用此qmake配置测试项目。下面的load(configure)加载qtke对qtCompileTest的支持 - 因为它通常不是内置的:

load(configure)
qtCompileTest(googletest)

在您要编译需要googletest的功能的地方,您可以将它们包装在以下qmake测试中:

CONFIG(config_googletest) {
}