Во-первых, в этом ответе предполагается, что защитные элементы для двух заголовков совместимы (т. Е. Не совпадают символы).
Одна вещь, которую вы можете сделать, - создать ссылки в известных местах на интересующие файлы заголовков., давая самим ссылкам разные имена.Например, скажем, две ваши библиотеки установлены в $ LIB1PATH и $ LIB2PATH, которые могут иметь разные значения в разных средах сборки.Таким образом, заголовки, которые вы хотите получить, находятся в $ LIB1PATH / include / foo.h и $ LIB2PATH / include / foo.h.
С этим можно пойти двумя путями.Одним из них является создание прямых ссылок.Это может выглядеть так в дереве каталогов вашего проекта:
$PROJDIR/
include/
lib_include/
lib1_foo.h -> $LIB1PATH/include/foo.h
lib2_foo.h -> $LIB2PATH/include/foo.h
src/
Это может быть сложно, если ваш код находится в хранилище, потому что вы не можете проверить эти ссылки;они были бы неправы в других средах.Кроме того, если у вас много этих ссылок и мало библиотек, вам придется заново создавать их все, когда lib1 или lib2 перемещаются ... не круто.Вы можете обойти эту проблему, создав ссылки в каталоге, который содержит каталог проекта:
$PROJDIR/
include/
lib_include/
lib1_foo.h -> ../../lib1/include/foo.h
lib2_foo.h -> ../../lib2/include/foo.h
src/
lib1 -> $LIB1PATH/
lib2 -> $LIB2PATH/
В обоих случаях вам нужно убедиться, что $PROJDIR/lib_include
находится на вашем пути включения.Кроме того, вам нужно иметь $LIB1PATH/include
и $LIB2PATH/include
в вашем пути включения, если два заголовка foo.h
извлекают больше заголовков из этих каталогов.Вы также можете поместить ссылки в include
и избавиться от lib_include
, но мне нравится хранить эти вещи отдельно.