I have a situation where I am using two libraries which have duplicate header file names. For example timer.h exists in both libraries. I think the normal solution to this would be to explicitly specify the directory in the include like #include <dir1/timer.h> or #include <dir2/timer.h> so that the compiler has a clue as to which I am specifying. However, my problem is that one of the libraries I am using is not in a sub directory of my project. It exists somewhere else at a higher level. That is…
- Root
- Library1
- Projects
- ProjectFolder
- Library2
- ProjectFolder
This was done so that multiple projects could reference Library1. It seemed like a good idea at the time. However, now that I have the name conflict of Library2 it creates issues. One other important detail is that I often use two different workstations. The absolute location of Library1 on these workstations is not the same, nor is the relative location (with respect to the project folder) the same between the two. What I have been doing to this point is adding both absolute locations to the search path of the preprocessor.
Anyway, I’d appreciate any guidance you might offer.
I’d prefer including a copy of a specific version of the external library with my project and updating to a newer version as needed (but not actually changing the external library from the project). If you just refer to the current (changing) version that everybody uses, then your project may change behavior without even having its code changed. A release of your project would also have to refer to whatever version of the library you were using at that point in time to be complete.
If you did it that way, the relative paths are always the same (say, “../ExternalLib”) if you want to use that approach. Or you can do as dave suggests.