linux上x86 C++开发存在哪些(可工作的)替代工具链
What (working) alternate toolchains exist for x86 C++ development on linux?
我精确地说,我将这个问题限制在x86(64位)linux盒的"本机"开发上。没有嵌入式或非x86体系结构。
由于我是一名C++用户,而且C++正在复兴,我目前正在将C++用于个人项目。
现在我使用的是健壮的、传统的linux/gcc/make工具链。
但通过博客文章和SO问题,我最近意识到了新的有前景的工具:
- "lang"作为"ccc"的替代方案,速度更快,提供更好的错误消息
- "old"代替"d",速度快得多
这些工具鲜为人知,甚至很容易不了解它们。
还有其他有趣的鲜为人知的工具我应该知道吗?例如gdb之类的替代方案?(我也在使用cmake)
我首先寻求开发的易用性,然后是开发速度的提高。欢迎任何其他改进。
如果可能,免费提供工具。
您可能对ccache感兴趣(一种编译器缓存,能够避免无用的重新编译,并且可以通过相同的g++
命令透明地使用,只需在$PATH
中添加一个符号链接)
对于C(但不是C++)编程,您可能会对tinycc
感兴趣,它编译速度非常快(但生成运行缓慢的二进制代码)。
编码时,可能会使用Boehm的垃圾收集器。请参阅这个与在C++中使用它相关的问题。
还可以使用valgrind
来调试内存泄漏。
有时,使用dlopen动态加载共享对象很有趣。在C++中,dlsym
的符号应该是extern "C"
。我有时喜欢动态生成C或C++代码,对其进行编译,并对模块进行dlopen
编译。
对于建筑,考虑调查其他建筑商,例如omake。
编译时,不要忘记编译器的-Wall
(也许还有-Wextra
)标志。新的链接时间优化(Makefile
中有CXX=g++ -flto
)可能很有趣(但编译时间会受到影响,因为可执行文件的速度可能会提高10%)。
如果您的源代码文件共享相同的C++头,那么预编译该头是值得的。
存在较新(例如,比C++更好)的语言,如Ocaml和Haskell,但也存在Go和D.
即使对于宠物项目,也要使用像GIT这样的版本控制系统。
Qt是一个很好的C++框架,尤其是它的图形工具包。
Wt使您能够非常快速地用C++编写web界面。
GCC&GDB仍在发展中。别忘了使用最新版本(例如,GCC为4.6,GDB为7.3),它比早期版本有了重大改进。
考虑通过插件或使用MELT扩展来扩展或自定义GCC编译器以满足您的特定需求。
我知道两种选择:
- tup
- 忍者建筑
两者都可以取代make,因为它们在大型项目中速度更快,因为它们不需要进行如此广泛的检查。
对于替换工具链的make部分,我推荐waf,它速度快,占地面积小。支持也比较好。
我试过金牌,虽然速度不比ld快,但似乎很有希望。不过,上次我检查时,它似乎并没有真正得到维护。
clang看起来很有前途,但我还没有在生产项目中尝试过。我计划这样做,因为它经过深思熟虑的设计带来了真正快速的发展。我计划用它切换到C++11^^
my2c
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 齿轮工如何区分两种工作?
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- cout 似乎在矢量迭代器C++中无法正常工作
- 为什么后缀失败并且前缀在传递迭代器作为参数并在尾部位置递归时工作正常
- iostream迭代器是如何工作的
- std::map迭代器是如何工作的
- gets() 在第一次循环迭代中不起作用,但在后续迭代中工作
- std::迭代器的准备工作已弃用
- 迭代合并排序,工作速度与气泡排序相同
- std::cin >>向量[i]不会让迭代器正常工作吗?
- 列表:<T>:迭代器无法正常工作
- c++:循环时出现TypeError,但在循环工作之前-(已修改)LinkedListClass迭代
- 迭代器不是可取消引用的堆栈(表达式树)和循环无法正常工作
- pthread中的线程在一些迭代之后停止工作
- 对对象的迭代停止工作
- 对不工作的wstring迭代器的输出进行相等比较
- 接受迭代器对的函数在并行运行时不工作
- ==如何在c++列表迭代器上工作