假设我在同一文件夹中有 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
编译器标志?
最佳答案
您可能会发现这个 SO 答案很有帮助:https://stackoverflow.com/a/9899919/5820799
归结为不用include_directories(${CMAKE_SOURCE_DIR}/B)
, 但要手动添加 -iquote
指令改为:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -iquote ${CMAKE_SOURCE_DIR}/B")
这将生成 -iquote <path>
而不是 -I <path>
.
它不漂亮,但可以完成工作。 :-)
关于gcc - 使用 cmake 处理 header 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42998855/