使用qmake下载和构建第三方库

时间:2017-07-01 16:06:44

标签: c++ git qt download qmake

CMake 项目中,我使用ExternalProject_Add函数来增加可移植性并减少在我自己的Git存储库中存储不必要的文件。此功能可以下载,配置,构建和安装(到特定位置)外部库。我正在 qmake 中寻找相同的功能,或者更少" hacky"比我的下一次试验。

让我们说我想在我的Qt项目中使用Google Test(尽管Qt有自己的),如下所示:

#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();
}

在项目文件中,我不想处理如何获取Google测试库,但依靠它:

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

现在这是我的&#34; hacky&#34;下载,构建和安装库的GTest.pri文件:

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

我不想在这个方向上更进一步的原因是,如果内置(或只是更好,更方便)同一问题的解决方案,我不想依赖平台特定的命令

1 个答案:

答案 0 :(得分:1)

我尝试了很多选择,并确定了这个片段。最有趣的是,此解决方案将qmake lame Makefile替换为实际库的Makefile,并将其自然地集成到项目中。

include(../common.pri)

TEMPLATE = aux
LIBPCAP_URL = "http://www.tcpdump.org/release/libpcap-1.9.1.tar.gz"

tcpdump_libpcap.target = $$LIBPCAP
tcpdump_libpcap.depends = FORCE
tcpdump_libpcap.commands = \
    (wget -qO - $${LIBPCAP_URL} | tar --strip-components=1 -zxf -) && \
    (CC=\"$${QMAKE_CC}\" CFLAGS=\"$${QMAKE_CFLAGS_RELEASE}\" ./configure \
    --host=$$NDK_TOOLCHAIN_PREFIX --disable-bluetooth --disable-dbus --disable-shared --disable-usb) && \
    make $$tcpdump_libpcap.target

QMAKE_EXTRA_TARGETS += tcpdump_libpcap
PRE_TARGETDEPS += $$tcpdump_libpcap.target

DISTFILES += CMakeLists.txt