[英]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.