在工作中,我们使用其他makefile包含的通用makefile(通过include语句),它有一个通用的"干净"目标,可以杀死一些常见文件.我想在我的新makefile中添加到该目标,这样我就可以删除一些特定的文件,但是如果我在makefile中添加一个干净的目标,它只会覆盖旧的目标.
我知道我可以用一个新的名字制作一个新的目标并让它调用干净,然后做其他的东西,但为了保持一致性,我希望能够调用make clean并让它做所有事情.
那可能吗?
我有一些Python代码会以一种漂亮的列格式自动打印一组数据,包括放入适当的ASCII转义序列来为各种数据着色以便于阅读.
我最终将每一行表示为一个列表,每个项目都是一个空格填充的列,以便每行上的相同列始终具有相同的长度.不幸的是,当我真正去打印时,并非所有列都排成一行.我怀疑这与ASCII转义序列有关 - 因为该len
函数似乎没有识别这些:
>>> a = '\x1b[1m0.0\x1b[0m'
>>> len(a)
11
>>> print a
0.0
Run Code Online (Sandbox Code Playgroud)
因此,当每列的长度相同时len
,它们在屏幕上打印时的长度实际上并不相同.
有没有办法(除了用正则表达式做一些hackery,我宁愿不这样做)来获取转义字符串并找出打印长度是什么所以我可以适当地填充空间?也许某种方式将其"打印"回字符串并检查其长度?
我不能为我的生活弄清楚如何正确地做到这一点.我有一个类需要存储一些常量(与枚举类型中的值对应的文本) - 我在我的类中声明它(公开):
const static char* enumText[];
Run Code Online (Sandbox Code Playgroud)
我试图像这样初始化它:
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
Run Code Online (Sandbox Code Playgroud)
但是gcc给了我以下错误:
'const char*MyClass :: enumText []'不是'class MyClass'的静态成员
我究竟做错了什么?谢谢!
我可能会遗漏一些关于list扩展的预期行为,但为什么会发生以下情况呢?
x = [[],[]]
y = [[]] * 2
print x # [[],[]]
print y # [[],[]]
print x == y # True
x[0].extend([1])
y[0].extend([1])
print x # [[1],[]], which is what I'd expect
print y # [[1],[1]], wtf?
Run Code Online (Sandbox Code Playgroud)
我猜这个*
操作员在这里做了一些意想不到的事情,虽然我不确定是什么.似乎正在发生的事情正在使得原始的x和y(在调用extend之前)实际上并不相等,即使==
运算符和repr
两者都会使它看起来好像它们是相同的.
我只碰到这个来到这里是因为我想预填充在运行时确定的大小的空列表的列表,然后意识到,这是不工作我想象的方式.我可以找到一个更好的方法来做同样的事情,但现在我很好奇为什么这不起作用.这是Python 2.5.2 BTW - 我没有安装更新的版本,所以如果这是一个错误,我不确定它是否已经修复.
我希望能够看到我的应用程序中的每个线程使用callgrind"昂贵".我使用--separate-thread=yes
选项进行了分析,该选项为整个应用程序提供了一个callgrind文件,然后是每个线程一个.
这对于查看任何给定线程的配置文件很有用,但我真正想要的只是每个线程的CPU时间排序列表,因此我可以看到哪些线程是最大的线程.
我发现自己最近在工作中遇到了很多相当大而复杂的代码库,我被要求进行复审或重构或两者兼而有之.当代码高度并发,大量使用模板(特别是静态多态)并且具有依赖于回调/信号/条件变量/等的逻辑时,这可能非常耗时.
C++期间是否有任何良好的可视化工具,其中有哪些实际上与"高级"C++功能相配合?任何事情都可能比我现在的方法更好,这基本上是笔+纸或踩过调试器.调试器方法可以很好地跟踪特定的代码路径,但是对于在进行严格的重构时看到真正需要的大图片并不是很好.
编辑:我应该提一下,Visual Studio插件对我来说不会有很多帮助,因为我们的东西主要是Linux.
我已经开始在emacs中使用mx术语(使用bash),但我注意到如果我使用向上箭头/向下箭头我只分别得到'A'和'B'而不是我的历史记录.有没有办法让这项工作?
在这种情况下,我有一个使用最近的GCC(4.3.3)的C++代码库,但我需要链接一个使用GCC 3.2.3构建的旧库.没有更新版本的库,我不能没有它,它是封闭源,所以它无法重建.
这似乎是一个问题,因为GCC 4.3.3和3.2.3之间存在ABI不兼容性,所以我试图看看我的选择是什么来解决这个问题.
一些额外的细节:
我到目前为止尝试过:
我阅读了这个页面:http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html这似乎表明可以在应用程序中混合使用C++ ABI版本来满足库之间不同的依赖关系.但是,这似乎并没有很好地工作,除非我遗漏了一些东西.
有任何想法吗?
我正在尝试使用CMake进行C++存储库,但是我遇到了一些麻烦,试图在没有大量额外CMake代码的情况下轻松地在同一源代码树中构建针对库的应用程序.
源树的布局基本如下:
ROOT
libs/
lib1/
lib2/
lib3/
apps/
app1/
app2/
app3/
Run Code Online (Sandbox Code Playgroud)
这些库彼此独立,并且应用程序可以链接到一个或多个库.
目前我有一个根CMakeLists.txt,它将每个应用程序和库列为子目录,这样如果更改了库并重建了应用程序,那么库也是如此.这工作正常,CMake链接它,而我不必指定库的位置,但我没有看到为包含目录做类似的事情的方法.
有没有一种常见的方法来处理这个问题?我不希望每个应用程序的CMakeLists.txt都必须手动列出它需要的库的路径.