Programming

CMake에서 include_directories와 target_include_directories의 차이점은 무엇입니까?

procodes 2020. 8. 20. 20:19
반응형

CMake에서 include_directories와 target_include_directories의 차이점은 무엇입니까?


다음과 같은 내 C ++ 코드에 대한 디렉토리 구조가 있습니다.

|
|->include
|->src

내 코드에 대한 CMakeLists.txt 파일을 작성하고 있습니다. 나는 사이의 차이를 이해하려면 include_directoriestarget_include_directories의를 CMake.

사용과 내 포함 파일 경로를 추가하기 위해 사용해야하는 경로의 차이점은 무엇입니까?


include_directories(x/y)디렉토리 범위에 영향을줍니다. 이 CMakeList의 모든 대상과 호출 지점 이후에 추가 된 모든 하위 디렉터리 x/y의 대상에는 포함 경로에 경로가 추가됩니다.

target_include_directories(t x/y)대상 범위가 있습니다. 대상 x/y의 포함 경로에 추가 됩니다 t.

모든 대상이 문제의 포함 디렉토리를 사용하는 경우 전자를 원합니다. 경로가 대상에 특정한 경우 또는 경로의 가시성을 더 세밀하게 제어하려는 경우 후자를 원합니다. 후자는 사실에서 오는 target_include_directories()지지체 PRIVATE, PUBLICINTERFACE한정자.


무엇 옆 문헌 : Angew의 대답은 제대로하는 것이 말했다 사이에 또 다른 매우 중요한 차이점 include_directoriestarget_include_directories그 인과 함께 사용했을 때 PUBLIC또는 INTERFACE, 후자 채우는 INTERFACE_INCLUDE_DIRECTORIES대상의 속성입니다. 이 속성은 다른 대상 target_link_libraries이 원래 대상에 연결하는 데 사용 하는 경우에 유용 합니다. 연결 대상에는 자동으로 해당 포함 디렉터리가 추가되기 때문입니다. 예를 참조하십시오 .

이 중요한 기능은 꽤 잘 문서에 숨겨져 : target_include_directories는 채우기 언급 INTERFACE_INCLUDE_DIRECTORIES누구의 문서를 말한다를 :

target_link_libraries ()를 사용하여 대상 종속성을 지정하면 CMake는 모든 대상 종속성에서이 속성을 읽어 소비자의 빌드 속성을 결정합니다.


@Angew가 말했듯이, 그 차이는 다음과 같습니다.

1, include_directories ()는 소스 트리의 모든 파일에 액세스 할 수 있습니다. 2, target_include_directories ()는 컴파일시 특정 대상에 대해서만 액세스 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/31969547/what-is-the-difference-between-include-directories-and-target-include-directorie

반응형