簡體   English   中英

使用 qmake 下載和構建第三方庫

[英]Download and build third-party libraries with 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 Test 庫,而是指望它:

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

現在這是我的“hacky” 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

我不想在這個方向上更進一步的原因是,如果有針對同一問題的內置(或者只是更好、更方便)的解決方案,我不想依賴特定於平台的命令。

我嘗試了很多選項並最終選擇了這個片段。 最有意思的是,這個方案把qmake跛腳的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM