从qmake迁移到qbs,类似于.pri文件并安装技术

时间:2018-05-22 09:14:23

标签: qt qbs

Qbs非常容易和酷的东西。但是,请帮助我理解一些qbs技术。

1)想象一下,我有一些来源的dir。使用qmake,我可以在该目录中创建“include.pri”文件,内容为:

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD

HEADERS +=  $$PWD/my_file.h
SOURCES +=  $$PWD/my_file.cpp

然后将它(以及许多其他公司包括在内)写入

的任何项目
include (some_path/include.pri)

in。 pro(.pri)file

qbs的类比是什么?

我知道模块项目,但是我想要包含的任何目录我需要输入“modules”目录。我需要使用 qbsSearchPaths 来查看我的主项目。 “modules”包装每个目录将是一些不合适的。

2)如果那时我想在这个来源的基础上制作静态库, 使用qmake我可以将公共头文件和lib文件安装到某个外部目录,可以从任何其他项目中获得。 但我可以用qbs做到这一点吗?我得出的结论是 install 仅提供相对于构建目录的路径,而不是一些抽象(绝对)路径。如果是这样,它的原因是什么?

1 个答案:

答案 0 :(得分:1)

1)根据您的具体要求,您可以在此处找到两种可能的解决方案。第一个是将.pri文件的内容转换为静态库:

StaticLibrary {
    name: "helper_lib"
    Depends { name: "cpp" }
    files: ["myfile.cpp", "myfile.h"]
    Export {
        Depends { name: "cpp" }
        cpp.includePaths: path
    }
}

然后在需要其功能的地方添加对此lib的依赖:

CppApplication {
    name: "myapp"
    Depends { name: "helper_lib" }
}

这是最明智的方法,如果来源将从他们被吸引到的任何地方以相同的方式编译。

第二种方法是从Group项继承:

Group { // top-level item in file mylibgroup.qbs
    prefix: path + "/"
    files: ["mylib.cpp", "mylib.h"]
}

像这样使用:

import "mylibgroup.qbs" as MyLibGroup
CppApplication {
    MyLibGroup { }
}

但请注意,在这种情况下,必须在导入产品中设置包含路径,除非它们只应用于组中的文件。

2)qbs.installDir指向"安装root",你可以打包,例如到tar.gz档案或其他什么。要直接安装到本地系统,可以将安装根目录设置为系统的根目录。例如:

$ qbs build --no-install qbs.installRoot:/
$ sudo qbs install