小编R.M*_*.M.的帖子

如何确定cout和cerr是否去同一个地方

C++ 中有没有办法判断 std::cout 和 std::cerr 是否指向同一个目的地?

也就是说,我希望能够区分程序何时启动

programprogram > log 2>&1program &> log

相对

program > logprogram 2> errorsprogram > log 2> errors

(用例是这样一种情况,当它们分开时,我们希望将错误信息打印到 stdout 和 stderr,但如果它们都到达相同的目的地,则希望打印格式稍有不同的输出(不仅仅是串联) . -- 是的,我知道这并不理想,也不是官方推荐的做事方式,也不应该被视为标准的做事方式。但请相信我,不过,我们已经花时间思考问题,对于我们的特定用例,这是最好的选择。)

出于我们的目的,我们可以假设在程序本身内没有对 cout/cerr 重定向做任何事情(只是典型的 shell 级命令行重定向),所以如果有直接查看 stdout/stderr 的 C 级功能(而不是std::cout 和 std::cerr 流正确),这也可能有效。

c++ cout stream

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

CMake + Ninja构建不跨库并行化

我们有一个(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文件以表达库之间依赖关系的最佳方法?或者这是忍者如何运作的不可逾越的限制?

c++ build cmake ninja

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

我如何 git remote prune 只是一个特定的远程分支?

我的一个同事“重用”了一个分支名称,所以每次我拉时,我都会收到一条错误消息:

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 git-remote

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

如何使用git filter-branch通过blob SHA1删除文件?

我见过的大多数git过滤器分支示例都是删除文件,它们是基于文件名删除文件的.我不一定想那样做.相反,我已经确定了要删除的文件的一些blob(不提交)SHA1,无论它们在存储库中的位置如何.(由于我们的回购历史,文件往往会在不改变的情况下移动.)

告诉git filter-branch根据blob SHA1删除文件的最佳方法是什么?

git git-filter-branch git-rewrite-history

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