问题标签 [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.
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.core
tragetPlatform
armqt
"linux"
这会在加载模块时导致失败,该Qt.core
模块具有强制qbs.targetPlatform === targetPlatform
. 这里qbs.targetPlatform
等于"linux"
whiletargetPlatform
为空。
目标平台qtprofilesetup.cpp
在函数中确定qbsTargetPlatformFromQtMkspec
。它查找以开头的QMAKE_XSPEC 值"linux-"
我的问题
有没有办法避免这种错误检测?我可以修补代码以允许'linux'出现在第一个'-'或类似的东西之后,但我不确定它是否有其他效果。
谢谢。
qt - 如何在 qbs 项目中设置 qrc 压缩设置?
在基于 qmake 的项目中,我可以这样做:
但是四处寻找,我似乎没有找到如何为 qbs 项目执行此操作。有任何想法吗?
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:
生成文件:
c++ - 我可以使用 QBS 创建用户定义的运行配置文件吗?
我正在 QT 中构建一个程序,它需要一个用户可定义的运行配置文件,类似于.vimrc
. 简而言之,它需要在类似诅咒的界面中定义哪些按键负责基本命令。
我还没有完全决定要使用什么格式,但我认为 QBS 可能适合我,因为我已经将它用于项目管理,而且从表面上看,它似乎很适合这种事情。
这个想法是把配置文件放在/home/me/.programrc
里面,这很容易。但是,我不知道 Qt 或 C++ 中的语法存在哪些解释器(如果有的话),或者它是否实际上适合首先用作运行配置。
这整个想法是否被恰当地概念化了,是否存在足够的工具来实现这一目标?
谢谢。
c++ - QBS 构建系统,无法使用 vcvars64.bat 初始化环境
我正在尝试使用 clang-cl 工具链实现我自己的模块以在 Windows 上构建 C++,因为目前 QBS 中没有内置支持。
我选择使用 lld-link 而不是 microsoft 链接器,因此我必须手动为其提供所有 MS 库包含路径。通过硬编码这些路径,我可以很好地构建我的应用程序。但我想让我的模块更灵活,并使用由|%LIB%
设置的环境变量。vcvars32.bat
vcvars64.bat
据我了解,这可以(应该?)在模块的setupBuildEnvironment
脚本中完成。这是我尝试阅读%LIB%
并失败的内容:
这给了我LIB =
,所以我无处可去。我的猜测是,在查询变量 ( ) 时进程已经终止p.getEnv("LIB")
,因此结果为空。QBS 文档Process.getEnv()
在这方面没有任何说明。
初始化环境的正确 QBS 方法是vcvars64.bat
什么,更广泛地说,获取内部进程环境的正确方法是什么setupBuildEnvironment
?
[更新]
好吧,尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱setupBuildEnvironment
脚本来解决:
但我想尽可能避免批处理脚本,所以问题仍然存在。
build - QBS:qbs.buildVariant 和 qbs.configurationName 有什么区别?
qbs.buildVariant
在 QBS 构建系统中,和的用例有什么区别qbs.configurationName
?
我很困惑,虽然它们都可用于选择发布或调试配置,但仅configurationName
映射到命令行参数config:
,但buildVariant
隐含的值取决于configurationName
. 两者似乎具有重叠的功能。
我的直觉是,其中一个(更可能是buildVariant
)可能已被视为已弃用,而没有在文档中反映这一点,但我可能/一定是错的。
所以,总而言之,有什么区别,我们什么时候应该更喜欢一个,特别是在创建自定义模块的情况下?
linker - 尽管在 qbs 配置文件中的 cpp.runtimeLibrary 中存在“静态”,但仍使用动态 runtimeLibrary
我有一些 qbs 项目,并且遇到了一些与运行时库链接的奇怪行为。
我使用了 Qt 静态库和自定义模块
和简单的例子
我明确定义profiles.windows-x86-msvc14.cpp.runtimeLibrary: "static"
了,它不会被继承或 qbs 文件覆盖。但是如果我不在 qbs 文件中定义它,我会得到
我想保存模块化而不是重复这个参数。你有什么想法,为什么会这样?
c++ - 如何在具有依赖关系的 qbs 产品之间强制同步?
我有一个包含多个产品的项目,其中一些取决于生成的代码(cpp 和 hpp 文件)。这个生成的代码是它自己取决于作为 CppApplication 的 code_generator 产品。
如果他的来源发生变化,我希望重新构建 code_generator,然后始终运行。只有在输出文件发生更改时才会修改输出文件(它在内部将它们生成在一个临时文件夹中,并在将它们移动到正确的位置之前使用校验和检查更改)。然后一旦生成文件,其他产品的编译就可以开始了。
我的问题是,在构建 code_generator.exe 之前,我将生成的文件放入其中的 StaticLibrary 开始构建。其他依赖于 StaticLibrary 的产品也可以在生成 .hpp 文件之前开始构建。
所以我的问题是:是否有一些机制可以让产品等到完全建立特定的依赖项?
我对任何类型的解决方案持开放态度,生成的代码可以在任何类型的模块中,我只是尝试使用 StaticLibrary,因为它看起来更方便。
PS:code_generator 产品生成了很多文件,并采用了一些我在 qbs 中不精确的输入,因为它始终可以运行,并且可以将其视为输入本身,因为它可以更改。这就是为什么我不确定使用 Rule 对我来说是否真的很有趣。
这是我的 qbs 文件的摘录:
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 配置文件,这样我就不必重新配置它们。