2017-03-24 3 views
2

동일한 폴더에 main.cpp, a.hb.h이 있다고 가정 해 봅니다. main.cppa.h을 포함하고 a.hb.h을 포함합니다.cmake와의 헤더 종속성 처리

파일을 확인하면 main.cpp.oa.hb.h 모두 예상대로 나타납니다.

b.h 경우 main.cpp.ob.h에 더 이상 의존하지 않는, 폴더 B로 이동하고 -iquote B 플래그를 사용한다.

파일에 include_directories(${CMAKE_SOURCE_DIR}/B)을 추가하여 종속성을 되돌릴 수 있습니다. 그러나 이것은 부작용이 있습니다. main.cpp을 컴파일 할 때 cmake-I/pathTo/B 플래그를 사용합니다. -I 대신 -iquote을 사용하는 것이 더 좋습니다.

-I 컴파일러 플래그를 도입하지 않고도 자동으로 종속성을 감지하도록하는 두 번째 경우가 있습니까? 당신이 그렇게 답을 찾을 수 있습니다

+0

CMake는 종속성 검사를 수행하지 않습니다. 컴파일러는 헤더 의존성을 탐지/추적/출력합니다. 예 : CMake는'-MMD' 플래그를 컴파일러 호출에 추가합니다 (예 :'CMAKE_DEPFILE_FLAGS_CXX' 참조). 나는 그것이'-I' 플래그를 정의하는'CMAKE_INCLUDE_FLAG_CXX'를 대체적으로 바꾸는 데 도움이되는지 확실하지 않습니다. 또는 짧게 긴 이야기 : CMake는 즉시 사용할 수있는'-iquote'를 지원하지 않습니다. – Florian

답변

0

도움이 :이 -iquote <path>을 생성하는 대신 -I <path>

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -iquote ${CMAKE_SOURCE_DIR}/B")

: https://stackoverflow.com/a/9899919/5820799

include_directories(${CMAKE_SOURCE_DIR}/B)를 사용하지만, 대신 수동 -iquote 지시문을 추가하지 귀결 . 예쁜 것은 아니지만 일을합니다. :-)