Descargue y cree bibliotecas de terceros con qmake

En los proyectos de CMake utilicé la function ExternalProject_Add para boost la portabilidad y disminuir el almacenamiento de files innecesarios en mi propio repository de Git. Esta function, entre otras, puede download, configurar, build e instalar (en una location específica) una biblioteca externa. Estoy buscando la misma funcionalidad en qmake o algo que es less "hacky" que mi siguiente testing.

Digamos que me gustaría usar Google Test en mi proyecto Qt (a pesar de que Qt tiene el suyo) de la siguiente manera:

#include <QtDebug> #include <gtest/gtest.h> TEST(Foo, FooTest) { qDebug() << "FooTest called..."; ASSERT_TRUE(true); } int main(int argc, char *argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } 

En el file de proyecto, no quiero tratar cómo obtendré la biblioteca de Google Test, sino que contaré con ella:

 TEMPLATE = app QT += core QT -= gui CONFIG += c++14 console CONFIG -= app_bundle EP_BASE = $$OUT_PWD/3rdParty include($$PWD/GTest.pri) TARGET = FreeTesting SOURCES += main.cpp DEPENDPATH += $$EP_BASE/Install/gtest/include INCLUDEPATH += $$EP_BASE/Install/gtest/include LIBS += -L$$EP_BASE/Install/gtest/lib/ -lgtest -lgmock 

Y ahora aquí está mi file "hacky" GTest.pri que descarga, construye e instala las bibliotecas:

 GTEST_V180 = "https://github.com/google/googletest/archive/release-1.8.0.tar.gz" GTEST_DOWNLOAD_STEP = mkdir -p $$EP_BASE/Source/gtest; cd $$EP_BASE/Source/gtest; \ curl -L $$GTEST_V180 | tar xzv --strip 1 GTEST_BUILD_STEP = mkdir -p $$EP_BASE/Build/gtest; cd $$EP_BASE/Build/gtest; \ cmake $$EP_BASE/Source/gtest/ -DCMAKE_INSTALL_PREFIX=$$EP_BASE/Install/gtest; \ make GTEST_INSTALL_STEP = mkdir -p $$EP_BASE/Install/gtest; cd $$EP_BASE/Build/gtest; \ make install gtest.target = googletest gtest.commands = if [ ! -d $$EP_BASE/Install/gtest/lib ]; then gtest.commands += $$GTEST_DOWNLOAD_STEP; $$GTEST_BUILD_STEP; $$GTEST_INSTALL_STEP; gtest.commands += fi QMAKE_EXTRA_TARGETS += gtest PRE_TARGETDEPS += googletest 

La razón por la que no quiero ir más allá en esta dirección es que no deseo confiar en los commands específicos de la plataforma si hay una solución incorporada (o simplemente simplemente mejor y más conveniente) para el mismo problema.