我最近有理由與一些Visual Studio C++項目一起使用調試和發佈配置,還有'全部釋放'和'全部調試',這是我以前從未見過的。#include所有.cpp文件到單個編譯單元中?
事實證明,項目的作者有一個ALL.cpp,其中包含所有其他.cpp文件。 *所有配置只是建立這一個ALL.cpp文件。它當然被排除在常規配置之外,並且常規配置不會生成ALL.cpp
我只是想知道這是否是一種常見的做法?它帶來了什麼好處? (我的第一反應是它聞起來很糟糕。)
你可能會遇到什麼樣的缺陷?我能想到的一點是,如果你的.cpps中有匿名命名空間,那麼它們不再是該「cpp」的「私有」,而是現在也可以在其他cpp中看到?
所有的項目都建立DLL,所以匿名命名空間中的數據不是一個好主意,對嗎?但功能會好嗎?
乾杯。
我們正式構建總是需要重建,所以我認爲這種做法可以提高構建性能很多。但由於官方版本主要由開發人員使用,但UnityBuild生成的pdbs對於非unitybuild代碼可能無效。 (我們不想用統一編譯配置進行開發,對吧?) – 2010-01-12 10:52:27
完全不同的理由將一些實現文件包含到另一個實現文件中:這些文件可以自動生成。自動生成整個文件比處理注入到現有代碼中的更改要容易得多。 – 2012-07-25 17:32:55
絕對病態;我只能猜測爲什麼有人會這樣做(如果你可以直接問他們,你應該)。通常在C++中,你想做相反的事情,不僅要保持實現文件,而且要保持頭部分離。 (C++項目的一個常見陷阱是「#include spaghetti」,每個頭文件都依賴於其他文件)。也許是爲了測試編譯器? – Morendil 2009-02-12 22:26:38