使用cmake处理头文件依赖关系

3
假设我在同一个文件夹中有main.cpp、a.h和b.h。main.cpp包含a.h,而a.h包含b.h。检查生成的depends.make文件,main.cpp.o依赖于a.h和b.h,如预期所示。如果将b.h移动到文件夹B中,并使用-iquote B标志,则main.cpp.o不再依赖于b.h。我可以通过将include_directories(${CMAKE_SOURCE_DIR}/B)添加到CMakeLists.txt文件中来恢复依赖关系。然而,这样做会产生副作用:在编译main.cpp时,cmake使用-I/pathTo/B标志。我更喜欢使用-iquote而不是-I。在这种情况下,是否有一种方法让cmake自动检测依赖项,而不引入-I编译器标志?

CMake 不会执行依赖项检查。编译器将检测/跟踪/输出头文件依赖项。例如,CMake 会向编译器调用添加 -MMD 标志(请参见 CMAKE_DEPFILE_FLAGS_CXX)。我不确定通常更改 CMAKE_INCLUDE_FLAG_CXX(它确实定义了 -I 标志)是否有帮助。或者简而言之:CMake 不支持开箱即用的 -iquote - Florian
1个回答

0

你可能会发现这个SO答案有帮助:https://dev59.com/C2LVa4cB1Zd3GeqPsQji#9899919

问题的关键在于不要使用include_directories(${CMAKE_SOURCE_DIR}/B),而是手动添加-iquote指令:

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

这将生成-iquote <path>而不是-I <path>。 虽然不太美观,但能完成任务。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接