C++ 中有没有办法判断 std::cout 和 std::cerr 是否指向同一个目的地?
也就是说,我希望能够区分程序何时启动
program或program > log 2>&1或program &> log
相对
program > log或program 2> errors或program > log 2> errors
(用例是这样一种情况,当它们分开时,我们希望将错误信息打印到 stdout 和 stderr,但如果它们都到达相同的目的地,则希望打印格式稍有不同的输出(不仅仅是串联) . -- 是的,我知道这并不理想,也不是官方推荐的做事方式,也不应该被视为标准的做事方式。但请相信我,不过,我们已经花时间思考问题,对于我们的特定用例,这是最好的选择。)
出于我们的目的,我们可以假设在程序本身内没有对 cout/cerr 重定向做任何事情(只是典型的 shell 级命令行重定向),所以如果有直接查看 stdout/stderr 的 C 级功能(而不是std::cout 和 std::cerr 流正确),这也可能有效。
我们有一个(C++)程序,它被设置为一系列具有嵌套层次结构的共享库.也就是说,libB.so使用函数from并因此链接libA.so,libC.so使用函数和libB.so和libA.so等链接.
对于我们当前的CMake + Ninja构建系统,我注意到并行构建似乎不会发生在库中.也就是说,虽然Ninja通常会使用12个内核来构建,但如果我从libA触及单个源文件但在libC中触及多个,ninja将仅使用单个处理器来构建libA源文件,直到libA.so被链接,此时它将使用12个处理器来编译libC源文件. - 如果libA源代码中的编译出错,它甚至不会尝试将libC文件编译成目标文件,即使我将-k传递给ninja也是如此.
当然,libC.so的链接需要延迟,直到libA.so被链接,但是源文件到libC源的目标文件的编译不需要为了链接libA而延迟.
我是否缺少关于设置CMake文件以表达库之间依赖关系的最佳方法?或者这是忍者如何运作的不可逾越的限制?
我的一个同事“重用”了一个分支名称,所以每次我拉时,我都会收到一条错误消息:
error: 'refs/remotes/origin/branch' exists; cannot create 'refs/remotes/origin/branch/subbranch'
...
error: some local refs could not be updated; try running
'git remote prune origin' to remove any old, conflicting branches
Run Code Online (Sandbox Code Playgroud)
问题是,我不想进行大规模的远程修剪 - 我很偏执,我想保留这些本地引用,以防其他同事以新的和有趣的方式搞砸。
有没有一种方法可以只修剪有问题的分支,而不必修剪所有其他分支,这些分支很高兴作为本地存储库中的远程引用?
我见过的大多数git过滤器分支示例都是删除文件,它们是基于文件名删除文件的.我不一定想那样做.相反,我已经确定了要删除的文件的一些blob(不提交)SHA1,无论它们在存储库中的位置如何.(由于我们的回购历史,文件往往会在不改变的情况下移动.)
告诉git filter-branch根据blob SHA1删除文件的最佳方法是什么?