CMake 目标 INTERFACE_INCLUDE_DIRECTORIES 是不是自动添加到父 INCLUDE_DIRECTORIES?
Posted
技术标签:
【中文标题】CMake 目标 INTERFACE_INCLUDE_DIRECTORIES 是不是自动添加到父 INCLUDE_DIRECTORIES?【英文标题】:Are CMake target INTERFACE_INCLUDE_DIRECTORIES automatically added to parent INCLUDE_DIRECTORIES?CMake 目标 INTERFACE_INCLUDE_DIRECTORIES 是否自动添加到父 INCLUDE_DIRECTORIES? 【发布时间】:2020-02-03 23:49:50 【问题描述】:在包含 CMakeLists.txt 的目录“fred”中:
add_library(fred)
...
target_include_directories(fred PUBLIC "inc")
这会使用“inc”填充 fred 的目标 INTERFACE_INCLUDE_DIRECTORIES 属性
调用 add_subdirectory(fred) 的目录是否会自动获取其 INCLUDE_DIRECTORIES 属性并附加 freds INTERFACE_INCLUDE_DIRECTORIES 属性(“inc”),还是我应该手动执行此操作?
我问,因为我有一个有两个 add_subdirectory 命令的项目,一个添加的包含路径似乎可用于代码,但不能用于另一个,不确定我是否搞砸了或误解了!
提前致谢
【问题讨论】:
the directory .. get its INCLUDE_DIRECTORIES property
目录没有属性。目标具有属性。每个目标都有自己的属性。 am I expected to do that manually?
到底是做什么的?您将如何手动执行此操作? be available to code [one?], but not the other,
如果它们之间没有依赖关系,那么根据您的解释,这正是应该发生的情况。
【参考方案1】:
包含目录将传播到链接到该库的任何目标。这意味着添加子目录是不够的。你还需要有
target_link_libraries(MyProject <PRIVATE|PUBLIC|INTERFACE> fred)
这将添加 myProject 的 fred 的包含目录。您可以在此处找到有关target_link_libraries 的更多信息。
【讨论】:
啊,谢谢,这很有意义...我研究了我正在使用的命令的帮助,但没有研究 target_link_libraries。虽然,我仍然有两个子目录,一个完全按照你所说的链接,一个没有。我想我将不得不进一步调试我的 cmake 文件......以上是关于CMake 目标 INTERFACE_INCLUDE_DIRECTORIES 是不是自动添加到父 INCLUDE_DIRECTORIES?的主要内容,如果未能解决你的问题,请参考以下文章