首先,这个答案假设两个标头的包含保护是兼容的(即不同的符号)。
您可以做的一件事是在已知位置创建指向感兴趣的头文件的链接,为链接本身赋予不同的名称。例如,假设您的两个库安装在 $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