CMake에서 include_directories와 target_include_directories의 차이점은 무엇입니까?
다음과 같은 내 C ++ 코드에 대한 디렉토리 구조가 있습니다.
|
|->include
|->src
내 코드에 대한 CMakeLists.txt 파일을 작성하고 있습니다. 나는 사이의 차이를 이해하려면 include_directories
와 target_include_directories
의를 CMake
.
사용과 내 포함 파일 경로를 추가하기 위해 사용해야하는 경로의 차이점은 무엇입니까?
include_directories(x/y)
디렉토리 범위에 영향을줍니다. 이 CMakeList의 모든 대상과 호출 지점 이후에 추가 된 모든 하위 디렉터리 x/y
의 대상에는 포함 경로에 경로가 추가됩니다.
target_include_directories(t x/y)
대상 범위가 있습니다. 대상 x/y
의 포함 경로에 추가 됩니다 t
.
모든 대상이 문제의 포함 디렉토리를 사용하는 경우 전자를 원합니다. 경로가 대상에 특정한 경우 또는 경로의 가시성을 더 세밀하게 제어하려는 경우 후자를 원합니다. 후자는 사실에서 오는 target_include_directories()
지지체 PRIVATE
, PUBLIC
및 INTERFACE
한정자.
무엇 옆 문헌 : Angew의 대답은 제대로하는 것이 말했다 사이에 또 다른 매우 중요한 차이점 include_directories
과 target_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 ()는 컴파일시 특정 대상에 대해서만 액세스 할 수 있습니다.
'Programming' 카테고리의 다른 글
프로덕션 Windows Server에 설치된 .NET 버전을 알 수있는 확실한 방법은 무엇입니까? (0) | 2020.08.20 |
---|---|
캐싱과 메모 화의 차이점은 무엇입니까? (0) | 2020.08.20 |
HTML 이미지 크기 조정 (0) | 2020.08.20 |
Swift Xcode 인덱스 동결 또는 느림 (0) | 2020.08.20 |
자바 스크립트 시작 부분에서 세미콜론을 시작하는 목적은 무엇입니까? (0) | 2020.08.20 |