根據這篇文章,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」。 –