我有一个qt项目设置作为一个子目录项目,我的源代码在一个src目录中,单元测试代码设置在一个测试目录中。每个都有自己的项目文件。我希望能够在其他计算机上编译源代码,但他们可能没有设置googletest库。我查看了qmake测试函数“requires()”和“packagesExist()”但是,它们似乎不是为了处理外部库而构建的。
如果找不到测试库,如何指示qmake跳过测试项目?
答案 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>... yes
或Checking 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) {
}