【发布时间】:2015-01-18 06:43:25
【问题描述】:
在我们的工作流程中,我们可以有一个由多个头文件组成的 module A,module A 不会产生任何二进制文件(旁注:它显然会被使用由其他模块,包括来自 module A 的一些标头以生成二进制文件)。
一个很好的例子是仅包含标头的库,由于 INTERFACE 库的概念(参见 this SO answer 和 CMake 的 documentation of the feature),CMake 3 引入了良好的支持。
我们可以用模块A制作一个接口库目标:
add_library(module_A INTERFACE)
这为我们提供了 CMakes 目标的所有优秀特性(可以将其用作另一个目标的依赖项、导出它、传递转发需求等)
但在这种情况下,module A 中的标头不会显示在我们的 IDE(Xcode,但我们希望它与大多数/所有其他 IDE 相同)。
这被证明是工作流程中的一个主要缺点,因为我们需要在 IDE 中显示构成 module A 的文件以进行编辑。有可能实现吗?
【问题讨论】:
-
啊删除了我的评论。好问题。
-
@IdeaHat 感谢您对这个问题的兴趣以及您的建议。遗憾的是,
add_library命令的INTERFACE形式不期望任何 file 参数(请参阅the last form in the documentation)。事实上,我们不一定需要INTERFACE,但这是我们知道的唯一可变非二进制目标。 [对于上下文,IdeaHat 想知道我们是否可以在add_library命令的INTERFACE形式中提供头文件] -
一种 hack 方法可以使用这些文件作为源来制作一个虚拟的自定义目标(从未构建或没有构建步骤)...对于我的个人教育,您是否有指向 CMake 的可变定义的链接?
-
@IdeaHat 我会考虑这种方法,同意这将是一种骇人听闻的方式; ) 关于目标可变性的概念,我在文档中没有找到定义,但通过the Pseudo Targets documentation 的推断,我的猜测是:可变目标可以具有(至少一些)其属性写入。 [其中一些是指“白名单”属性的概念,例如。限制可以在
INTERFACE] 上写入哪些属性。 -
它在功能请求cmake.org/Bug/view.php?id=15234下捕获
标签: c++ xcode ide cmake header-files