【问题标题】:Handling header dependencies with cmake使用 cmake 处理标头依赖项
【发布时间】:2017-08-17 08:29:28
【问题描述】:

假设我在同一个文件夹中有main.cppa.hb.hmain.cpp 包括a.ha.h 包括b.h

检查generated depends.make 文件,正如预期的那样,main.cpp.o 取决于a.hb.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

标签: gcc cmake


【解决方案1】:

您可能会发现这个 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>。 它不漂亮,但可以完成工作。 :-)

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多