问题标签 [qbs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
79 浏览

qt - QBS:qbs-setup-qt 无法检测到目标平台

背景

我已经使用工具链为 ARM 目标交叉编译了 Qt arm-linux-gnueabihf-gcc

运行qmake -query给出(以及其他值)QMAKE_XSPEC:arm-linux-gnueabihf-g++

运行时,我得到配置文件的'属性的qbs-setup-qt <path to the qmake> armqt空 ( "") 值。我希望得到.Qt.coretragetPlatformarmqt"linux"

这会在加载模块时导致失败,该Qt.core模块具有强制qbs.targetPlatform === targetPlatform. 这里qbs.targetPlatform等于"linux"whiletargetPlatform为空。

目标平台qtprofilesetup.cpp在函数中确定qbsTargetPlatformFromQtMkspec它查找以开头的QMAKE_XSPEC 值"linux-"

我的问题

有没有办法避免这种错误检测?我可以修补代码以允许'linux'出现在第一个'-'或类似的东西之后,但我不确定它是否有其他效果。

谢谢。

0 投票
1 回答
446 浏览

qt - 如何在 Qt 代码中访问 Qt 构建系统项目 (QBS) 变量

再会。

我需要访问我的 Qt 代码中的特定 QBS 变量。

一个例子是应用程序的名称、组织甚至是风格,在我的应用程序 qbs 文件中指定的所有变量都是这样。

查看QBS的 Qt 文档,我没有找到在 Qt 代码中使用 QBS 变量的任何参考。

是使用 QBS 变量的唯一链接,但仅限于 QBS 文件中

我想这样做:

我怎样才能做到这一点?

0 投票
1 回答
112 浏览

qt - 如何在 qbs 项目中设置 qrc 压缩设置?

在基于 qmake 的项目中,我可以这样做:

但是四处寻找,我似乎没有找到如何为 qbs 项目执行此操作。有任何想法吗?

0 投票
1 回答
133 浏览

qt - QBS:当通过另一个文件中的宏声明类时,qbs 无法运行 moc

在我的项目中,我需要使用宏创建 QObject 派生类(使用 Q_OBJECT 和信号)。该宏位于一个单独的文件中。这是一个简化的示例:

宏在文件 CreateQtClass.h 中声明:

我使用宏在文件 MyQtClass.h 中创建我的类

在我的 .qbs 文件中,我将 MyQtClass.h 添加到 files 属性,如下所示:

现在,当运行时qbs build,qbs 不会在 MyQtClass.h 上运行“moc”。看起来它没有正确进行扫描,也没有检测到宏内的 Q_OBJECT。

(我可能会注意到,如果宏声明和使用在同一个文件中,一切正常)。

我的问题:

有没有办法让用户手动强制 qbs 在文件上运行“moc”?

也许我们需要类似“force_moc”文件标签(与“unmocable”相反)之类的东西,我可以将其应用于包含 MyQtClass.h 的组。

添加:

我添加了一个简单的 Makefile 和 main.cpp 来证明 moc 可以很好地与上述方法配合使用:

文件 main.cpp:

生成文件:

0 投票
1 回答
49 浏览

c++ - 我可以使用 QBS 创建用户定义的运行配置文件吗?

我正在 QT 中构建一个程序,它需要一个用户可定义的运行配置文件,类似于.vimrc. 简而言之,它需要在类似诅咒的界面中定义哪些按键负责基本命令。

我还没有完全决定要使用什么格式,但我认为 QBS 可能适合我,因为我已经将它用于项目管理,而且从表面上看,它似乎很适合这种事情。

这个想法是把配置文件放在/home/me/.programrc里面,这很容易。但是,我不知道 Qt 或 C++ 中的语法存在哪些解释器(如果有的话),或者它是否实际上适合首先用作运行配置。

这整个想法是否被恰当地概念化了,是否存在足够的工具来实现这一目标?

谢谢。

0 投票
1 回答
98 浏览

c++ - QBS 构建系统,无法使用 vcvars64.bat 初始化环境

我正在尝试使用 clang-cl 工具链实现我自己的模块以在 Windows 上构建 C++,因为目前 QBS 中没有内置支持。

我选择使用 lld-link 而不是 microsoft 链接器,因此我必须手动为其提供所有 MS 库包含路径。通过硬编码这些路径,我可以很好地构建我的应用程序。但我想让我的模块更灵活,并使用由|%LIB%设置的环境变量。vcvars32.batvcvars64.bat

据我了解,这可以(应该?)在模块的setupBuildEnvironment脚本中完成。这是我尝试阅读%LIB%并失败的内容:

这给了我LIB =,所以我无处可去。我的猜测是,在查询变量 ( ) 时进程已经终止p.getEnv("LIB"),因此结果为空。QBS 文档Process.getEnv()在这方面没有任何说明。

初始化环境的正确 QBS 方法是vcvars64.bat什么,更广泛地说,获取内部进程环境的正确方法是什么setupBuildEnvironment


[更新] 好吧,尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱setupBuildEnvironment脚本来解决:

但我想尽可能避免批处理脚本,所以问题仍然存在。

0 投票
1 回答
74 浏览

build - QBS:qbs.buildVariant 和 qbs.configurationName 有什么区别?

qbs.buildVariant在 QBS 构建系统中,和的用例有什么区别qbs.configurationName

我很困惑,虽然它们都可用于选择发布或调试配置,但仅configurationName映射到命令行参数config:,但buildVariant隐含的值取决于configurationName. 两者似乎具有重叠的功能。

我的直觉是,其中一个(更可能是buildVariant)可能已被视为已弃用,而没有在文档中反映这一点,但我可能/一定是错的。

所以,总而言之,有什么区别,我们什么时候应该更喜欢一个,特别是在创建自定义模块的情况下?

0 投票
0 回答
101 浏览

linker - 尽管在 qbs 配置文件中的 cpp.runtimeLibrary 中存在“静态”,但仍使用动态 runtimeLibrary

我有一些 qbs 项目,并且遇到了一些与运行时库链接的奇怪行为。

我使用了 Qt 静态库和自定义模块

和简单的例子

我明确定义profiles.windows-x86-msvc14.cpp.runtimeLibrary: "static"了,它不会被继承或 qbs 文件覆盖。但是如果我不在 qbs 文件中定义它,我会得到

我想保存模块化而不是重复这个参数。你有什么想法,为什么会这样?

0 投票
1 回答
101 浏览

c++ - 如何在具有依赖关系的 qbs 产品之间强制同步?

我有一个包含多个产品的项目,其中一些取决于生成的代码(cpp 和 hpp 文件)。这个生成的代码是它自己取决于作为 CppApplication 的 code_generator 产品。

如果他的来源发生变化,我希望重新构建 code_generator,然后始终运行。只有在输出文件发生更改时才会修改输出文件(它在内部将它们生成在一个临时文件夹中,并在将它们移动到正确的位置之前使用校验和检查更改)。然后一旦生成文件,其他产品的编译就可以开始了。

我的问题是,在构建 code_generator.exe 之前,我将生成的文件放入其中的 StaticLibrary 开始构建。其他依赖于 StaticLibrary 的产品也可以在生成 .hpp 文件之前开始构建。

所以我的问题是:是否有一些机制可以让产品等到完全建立特定的依赖项?

我对任何类型的解决方案持开放态度,生成的代码可以在任何类型的模块中,我只是尝试使用 StaticLibrary,因为它看起来更方便。

PS:code_generator 产品生成了很多文件,并采用了一些我在 qbs 中不精确的输入,因为它始终可以运行,并且可以将其视为输入本身,因为它可以更改。这就是为什么我不确定使用 Rule 对我来说是否真的很有趣。

这是我的 qbs 文件的摘录:

0 投票
1 回答
55 浏览

qt5 - QBS 配置文件不会随时保存和更新

我在运行 Windows 和 Ubuntu 的 PC 上安装了 QtCreator。Ubuntu 我用来为 Linux 和 RaspberryPi 构建一个项目。使用 Windows PC 在 x86、x86_64 和 android 中构建项目:armv7a、arm64、x86(用于模拟器)。windows还用于为stm32开发嵌入式软件。因此,我需要 6 个用于 windows 的 qbs 配置文件和 3 个用于 linux 的配​​置文件。该项目本身使用 QBS 作为构建系统。

问题是很难确定当前使用的是哪一组。下面我给出了我的 qbs 文件的开头,我在其中初始化了主要变量。

自动创建的 QBS 配置文件没有完全填写的字段,我必须使用 qbs-config-ui 实​​用程序手动填写这些字段。此外,此实用程序和 qtcreator 的行为在 windows 和 linux 中是不同的。

在 windows 中,会发生以下情况:打开 qtcreator 后,Tools-Kit-Qbs 中的旧设置保留上次工作会话,打开工作项目后,设置重置为默认状态。接下来,我打开 qbs-config-ui 实​​用程序并手动更改我需要的包中的 qbs.targetPlatform 和 qbs.architecture,然后保存设置。在 QtCreator 中,我打开设置窗口并看到我的更改已完成。然后我可以工作到下一个工作会议。

在 Linux 中,这种行为通常不存在,没有规律地在 QtCreator 中如何更新配置文件以及它是如何飞行的,我还没有看到。

我的问题是如何一劳永逸地正确配置 QBS 配置文件,这样我就不必重新配置它们。