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