我有一些基于 qmake 的 Windows 项目,这些项目每天都在 Jenkins 上构建。Jenkins 在 Windows 机器上运行,我的项目使用“Windows 批处理命令”构建得很好,这与运行一个好的旧批处理 (.bat) 文件几乎相同。
如今,Qt Creator 集成了 clang-tidy 和 clazy,这些可以在使用 Qt Creator 的 GUI 的项目上运行。
我现在希望每天在我的 Jenkins 实例上运行这些整洁而疯狂的检查。
有没有办法从 qmake 项目的非 GUI 环境运行这些工具?
编辑:我相信我需要添加一些关于我已经尝试过的内容以及我遇到问题的信息,以便以令人满意的方式运行某些内容。
对于 clang-tidy,我发现将所有项目设置(例如包含路径、环境变量等)提供给工具是有问题的。Qt Creator 可以通过其插件来做到这一点,因为它拥有那里可用的所有信息。我发现可以使用compile_commands.json 文件运行clang-tidy 来解决此问题。但是,我找不到在 Windows 上将 qmake .pro 文件“转换”为compile_commands.json 文件的方法。根据这篇博客文章,在 Linux 上,这可以通过 bear 实现,但对于 Windows 似乎没有替代方案......
对于 clazy,可以在正常构建期间运行它,如其文档中所述。然而,这样的构建需要太多的时间来运行,并且它将大部分时间用于不需要的构建输出,这也是不可取的。花费这么长时间的原因是我必须将构建切换到单核构建,因为否则我会得到不同步、混乱的文本输出,然后我无法正确解析它们。
我还知道 Qt 创建者可以在其构建菜单中为当前打开的项目生成一个compile_commands.json 文件。然而,这似乎隐藏在 IDE 代码中,没有 GUI 就无法使用......
或者也许可以根据生成的 makefile 或生成的 Visual Studio 项目文件运行工具?所有这些事情对我来说似乎相当复杂且容易出错,我真的希望有一种简单的方法可以在这里运行一些东西。
我想知道我可以在QML环境中使用哪些字体作为font.family属性.这些字体是特定于系统还是内置于框架中?有没有办法列出所有可用的字体?
我想在QML中使用C++ Classes作为Singleton实例,并认为我必须使用qmlRegisterSingletonType注册它们.此函数需要一个函数,该函数提供已注册的C++类的实例.我在Windows上使用最新的Qt 5.3.1和MinGW 4.8.
该文档显示了以下提供程序函数示例:
static QJSValue example_qjsvalue_singletontype_provider(QQmlEngine *engine,
QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
static int seedValue = 5;
QJSValue example = scriptEngine->newObject();
example.setProperty("someProperty", seedValue++);
return example;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用它,但是当我在标头中的类范围之外定义这样的函数时,我收到编译器警告,发生在包含相同标头的另一个cpp文件中:
warning: 'QObject* example_qjsvalue_singletontype_provider(QQmlEngine*,
QJSEngine*)' defined but not used [-Wunused-function]
Run Code Online (Sandbox Code Playgroud)
此外,编写一个单独的提供程序,从不同的cpp文件调用时返回一个新实例,这感觉是错误的.所以我尝试了一个自己的实现,我使用静态类成员来返回实例:
// mysingleton.h
class MySingleton: public QObject
{
Q_OBJECT
Q_DISABLE_COPY(MySingleton)
public:
static QObject *qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine) {
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
if(!m_instance)
{
m_instance = new MySingleton();
}
return m_instance;
}
MySingleton(QObject* parent = 0)
:QObject(parent)
{}
private:
static QObject* m_instance;
}; …Run Code Online (Sandbox Code Playgroud) 我想递归删除批处理文件中具有特定扩展名的所有文件。
我知道以下命令:
del /s *.ext
Run Code Online (Sandbox Code Playgroud)
但是,这在 Windows 上也会删除具有其他扩展名的文件,例如 .ext1 或 .ext2 。其原因似乎是此类文件的 8.3 文件名以 .ext 结尾,因此扩展名较长的文件也会匹配。
我正在寻找上述命令的替代方法,该命令递归删除所有具有 .ext 扩展名的文件,但保留具有更长扩展名的文件。
在某些情况下,使用char类型在库中实现字节数组,这是许多编译器的签名类型.
是否有一种简单,可读和正确的方法来初始化一个十六进制值大于127但不大于255的有符号字符?
目前我最终得到以下内容,我一直认为必须有一些更简单的东西:
const unsigned char ff_unsigned = 0xff;
const char ff_signed = static_cast<const char>(ff_unsigned);
Run Code Online (Sandbox Code Playgroud)
我想要一个没有警告的解决方案,即使使用比默认值更高的编译器警告级别.
以下解决方案例如创建C4310:使用MSVC 2013生成截断常量值:
const char ff_signed = char(0xff);
Run Code Online (Sandbox Code Playgroud)