자동 종속성 전파와 같은 최신 기능을 사용하기 위해 레거시 CMake 설정을 다시 작성하는 중입니다. (즉 , target_include_directories(<target> PUBLIC <dir>)
대신에 같은 것을 사용합니다 include_directories(<dir>)
.) 현재, 우리는 많은 전역 디렉토리 속성을 설정하여 모든 프로젝트 의존성 정보를 수동으로 처리합니다.
필자의 테스트에서 새 빌드의 대상이 이전 빌드와 달리 라이브러리에 연결되는 몇 가지 예를 찾았습니다. 명시 적으로 연결하지 않으므로 대상의 종속성에서 발생한다는 것을 알고 있지만 찾을 CMakeLists.txt
때까지 종속성 계층을 따라 프로젝트의 모든 항목을 재귀 적으로 조사 해야하는 것을 찾기 위해 하나는 문제의 라이브러리를 가져옵니다. 우리는 수십 개의 라이브러리를 가지고 있으므로 사소한 프로세스가 아닙니다.
CMake는 각 대상에 대해 어떤 종속 항목이 명시 적으로 추가되었으며 어떤 대상이 전이 종속 항목을 통해 전파되었는지 확인할 수있는 방법을 제공합니까?
--graphviz
출력에 이러한 차이 가 표시되는 것처럼 보이기 때문에 CMake는 컨텍스트를 내부적으로 잘 알고 있습니다. 그러나 tree
명령 줄에 종속성 정보를 표시 하는 비슷한 스크립트 를 작성하고 Graphviz 파일을 구문 분석하는 것은 악몽과 해킹처럼 들립니다.
내가 알 수있는 한이 정보는 포함 cmake-file-api
하지 않습니다 . 나는 codemodel/target/dependencies
필드가 효과가 있다고 생각 했지만 로컬 및 전 이적 종속성이 함께 혼합되어 나열되어 있습니다. 그리고 backtrace
각 종속성 의 필드 는 현재 대상에 대한 add_executable
/ add_library
호출 에만 연결됩니다 .
--graphiz
옵션이 질문에 어떻게 대답 하지 않습니까? 도트 파일을 파싱하는 것이 악몽처럼 느껴지는 이유는 무엇입니까? 도트 파일은 사람이 읽을 수있는 가장 간단하고 일반적이며 유연한 방법으로 연결된 지점을 나타냅니다.gvpr
유틸리티를 사용하면 어색한 스타일로 무엇이든 할 수 있으며 다른 언어로 가져올 수 있습니다. 문자 그대로 대상간에 트리 형태의 종속성 구조를 나타내는 도트 파일이 필요한 이유는 무엇입니까?