根据这篇文章,Google C++测试框架认为“make install”是一种不好的做法。'make install'被认为是有害的吗?
http://groups.google.com/group/googletestframework/browse_thread/thread/668eff1cebf5309d
这样做的原因是,这个库违反了“一个定义规则”。
http://en.wikipedia.org/wiki/One_Definition_Rule
某处在线程进一步,它说:“如果你通过不同-DGTEST_HAS_FOO = 1个标志,以不同的翻译单位,你会违反ODR或者有时候人们使用-D 选择哪个malloc的。库(debug vs release),并且你有 在整个电路板上使用相同的malloc库。“
我的问题:
- 究竟是什么这个项目是做错了什么?
- 我们能从中学到什么?我们如何编写更具防御性的代码来防止违反ODR?
问题标题和第一行实际上有点混乱。 'make install'中没有任何事情可以触发ODR违规行为,或者可以被认为是*糟糕的做法*。如果不同的用户试图共享二进制文件并编译具有不同编译器标志的不同位, –
他们建议您应该将第三方库(也可能是其他)集成到项目的构建系统中而不是使用“make install”。 –