I have a library Lib
and an executable App
with the following file hierarchy:
Lib/
- external/
- pugixml/
- pugixml.hpp -> namespace ``pugi`` and header guard ``LIBA_PUGIXML_HPP``
- pugixml.cpp
App/
- external/
- pugixml/
- pugixml.hpp -> namespace ``pugi`` and header guard ``APP_PUGIXML_HPP``
- pugixml.cpp
Both App
and Lib
use the external library pugixml (might be different versions). They include thes files directly in the project and pugixml is no external dependency anymore basically.
App
depends on Lib
and includes all necessary sources from Lib
(it does not link with Lib
) to successfully compile itself.
How can I avoid namespace clashes of the pugixml.hpp library which arises when compiling App
. How can I use two different versions of the same library in this setting?
I see the following options:
Move namespaces
pugixml
inA
intonamespace A{ namespace pugixml {...} }
, and the same inapp
: move namespacespugixml
inapp
intonamespace app{ namespace pugixml {...} }
Rename all namespaces ? How should I do this? Hardcoding? or is there a c++ syntax for this?
What is a good approach?