小编Mat*_*hew的帖子

如何安装使用 bazel 构建的项目?

我正在从事一个从 CMake 过渡到 Bazel 的项目。我们显然在讨价还价中失去的一个关键功能是安装项目的能力,以便其他(不一定是 Bazel)项目可以使用它。

AFAICT,目前没有安装项目的内置支持?!

我需要创建一个可移植的(至少必须在 Linux 和 MacOS 上工作)方式来安装项目。具体来说:

  • 我需要能够指定LICENSE需要安装的库、头文件、可执行文件和其他文件(例如)。
  • 用户需要能够指定应该安装东西的绝对前缀。
    • 我真的,真的应该能够多次执行“安装”步骤,每次给出不同的前缀,而不会让 Bazel 感到困惑(即它不能试图“记住”它已经安装的文件,或者如果它这样做了,必须了解前缀何时与上次不同)。
  • 库应该安装到正确的位置(例如lib64),或者至少应该可以让用户指定正确的 libdir。
  • 安装步骤一定不能从先前触及的任何文件的时间戳安装并没有改变。(理想情况下,Bazel 自己会处理这个问题;使用该install命令很棘手,并且存在潜在的可移植性问题。请注意上面的平台要求。)

这样做的最佳方法是什么?

bazel

6
推荐指数
1
解决办法
1232
查看次数

从1.55开始,boost :: bind/boost :: function中的奇怪行为发生了变化

我试图编译一个针对较新的Boost 1.63针对Boost 1.55 编写的项目,我遇到了与bind/ 相关的一个非常奇怪的错误function.这是完整,简化的测试用例:

#include <boost/bind.hpp>
#include <boost/function.hpp>

template < typename Arg1 = int, typename Arg2 = int, typename Arg3 = int >
class foo
{
public:
  using function_t = boost::function3< void, Arg1, Arg2, Arg3 >;

  void set_function( function_t f )
  {
    func_ = f;
  }

private:
  function_t func_;
};

class bar
{
public:
  bar()
  {
    foo_.set_function( boost::bind( &bar::func, this, _1, _2 ) );
  }

private:
  void func( int const&, int& …
Run Code Online (Sandbox Code Playgroud)

c++ boost

6
推荐指数
1
解决办法
397
查看次数

distutils.util.get_platform() 的替代品是什么?

显然,Python 3.10 / 3.12 将弃用/删除 distutils ( cpython/issues/92584 )。

\n

不幸的是,我无法找到一个替代品来替代我正在使用的唯一功能;distutils.util.get_platform()。这个的替代品是什么?

\n

请注意,platform不是答案。我需要一个函数返回构建二进制wheel\xc2\xb9 时使用的完整字符串,例如。请特别注意,其中似乎嵌入了特定于平台的逻辑(例如,我知道获取 macos 版本的唯一其他方法是使用特定于 macos 的 API)。macosx-12-x86_64

\n

(\xc2\xb9 正如评论中所指出的,distutils.util.get_platform()严格来说,不是那个函数。但是,PEP 425指定“平台标记只是distutils.util.get_platform()将所有连字符-和句点.替换为下划线_。”因此,它是直接的,并且与平台无关的从 派生标签distutils.util.get_platform()。因此,可接受的答案可能会提供经过批准的公共 API,它直接生成平台标签,或者是 的兼容替代品distutils.util.get_platform()。)

\n

python distutils setuptools python-3.x

6
推荐指数
1
解决办法
1250
查看次数

理解运算符查找; 哪个编译器是正确的?

这可能会被问到,但我没有找到答案的运气...

我有一个无序的容器(即一个哈希;我们称之为QHash,因为它可能会发生在任何类似的情况下),它需要一个比较运算符作为它的密钥类型.

考虑以下:

// foo.h
class Bar
{
public:
    class Foo {};
};

// foo.cpp
#include <QtCore/QHash>

namespace
{
    typedef Bar::Foo Foo;
    bool operator==(Foo const& a, Foo const& b) { return &a == &b; }
}

uint qHash(Foo const& foo) { return qHash(&foo); }

int main()
{
    QHash<Foo, int> hash;
    // do stuff with hash, e.g.:
    hash.insert(Foo(), 5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用G ++,一切都很好.但是,clang在qhash.h的内容invalid operands to binary expression中给出了一个错误,即==在实例中使用的地方Foo.在我看来,clang要么没有找到或拒绝operator==匿名命名空间中的定义,可能是由于与G ++不同的查找规则.

我想知道,哪个编译器是正确的?

ps我正在使用C++ 11模式构建,以防它有所作为.

c++ templates namespaces operator-overloading

4
推荐指数
2
解决办法
241
查看次数

如何在 perl 中完成这个字节调整?

背景:

我正在尝试使用此处的 perl 脚本来解密 android 备份。不幸的是,校验和验证失败。

在玩弄这个 (Python) 脚本之后,问题似乎是我需要对主密钥(masterKeyJavaConversionPython 脚本中的nb )做一些额外的修改。

问题:

我需要带一包字节并执行以下转换步骤:

  • 从有符号字符到有符号短字符的符号扩展
  • 将结果从 UTF16 (BE?) 转换为 UTF-8

例如(所有字节都是十六进制的):

  • 3倍?3倍
  • 7倍?7倍
  • ax -> ef 是 ax
  • bx -> ef 是 bx
  • cx -> ef bf 8x
  • dx -> ef bf 9x
  • ex -> ef bf ax
  • fx -> ef bf bx

x始终保持不变。)

更具体地说,给定一个位序列1abc defg,我需要输出1110 1111 1011 111a 10bc defg. (对于0abc defg,输出只是0abc defg,即不变。)


答案可能会使用 …

arrays perl

1
推荐指数
1
解决办法
97
查看次数