먼저이 대답은 두 헤더의 포함 가드가 호환 가능하다고 가정합니다 (즉, 동일한 기호가 아님).
당신이 할 수있는 한 가지는 링크 파일을 고유 한 이름으로 지정하여 알려진 헤더 파일의 알려진 위치에 링크를 만드는 것입니다. 예를 들어 두 라이브러리가 $ 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
당신이 경로를 포함에 있는지 확인해야합니다. 또한 두 개의 foo.h
헤더가 해당 디렉토리에서 더 많은 헤더를 가져 오는 경우 포함 경로에 $LIB1PATH/include
과 $LIB2PATH/include
만 있으면됩니다. 당신은 또한 include
에있는 연결을두고 lib_include
를 제거 할 수 있었다, 그러나 나는이 것을 분리되는 유지하고 싶다.
방법이 아니라에서 (디렉토리 순서를 포함) 코드 자체. 누군가가 프로젝트 설정을 재구성해야한다면,이 문제가 심지어 적절한 설정보다 훨씬 적다는 것을 분명히 알 수 없습니다. –
@ 마이크 이러한 방법이 최선의 방법은 아니라는 것을 알고 있지만, 지금 내가 생각하고있는 유일한 방법입니다. 나는이 방법들 중 어느 것도 좋아하지 않기 때문에 여기서는 더 나은 방법을 묻습니다. – Felics