【发布时间】:2017-08-17 08:29:28
【问题描述】:
假设我在同一个文件夹中有main.cpp、a.h 和b.h。 main.cpp 包括a.h,a.h 包括b.h。
检查generated 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 完成的。编译器将检测/跟踪/输出标头依赖项。只是例如
-MMD标志由 CMake 添加到编译器调用(参见例如CMAKE_DEPFILE_FLAGS_CXX)。我不确定这是否有助于普遍改变CMAKE_INCLUDE_FLAG_CXX(它确实定义了-I标志)。或者长话短说:CMake 不支持开箱即用的-iquote。