微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c++ 如何让CMake在IDE中显示不属于任何二进制目标的头文件?

在我们的工作流程中,我们可以有一个由几个头文件组成的模块A,模块A不产生任何二进制文件(注意:它显然将被其他模块使用,包括模块A中的一些头文件以生成二进制文件) 。

一个很好的例子是一个只有标题的库,由于INTERFACE库的概念(见this SO answer和CMake的documentation of the feature),CMake 3引入了一个很好的支持。

我们可以使模块A中的接口库目标:

add_library(module_A INTERFACE)

这给了我们CMakes目标的所有好的功能(可以使用它作为另一个目标的依赖,导出它,以转移转发需求等)

但在这种情况下,模块A中的标题不会显示在我们的IDE中(Xcode,但是我们预计它与大多数/每个其他IDE是一样的)。

这证明是工作流程中的主要缺点,因为我们需要组合模块A的文件在IDE中显示出版。有可能实现吗?

解决方法

几个月下来,我没有找到一种方法来直接列出INTERFACE库的头文件。

由于问题仍然有一些意见,所以这里是我最后所做的(即现在看起来像较小的黑客)。

想象一下,模块A只是一个标题库。在CMakeLists.txt中声明其目标:

# Define 'modA_headers' variable to list all the header files
set(modA_headers 
  utility.h
  moreUtilities.h
  ...)

add_library(moduleA INTERFACE) # 'moduleA' is an INTERFACE pseudo target

#
# From here,the target 'moduleA' can be customised
#
target_include_directories(moduleA ...) # Transitively forwarded
install(TARGETS moduleA ...)

#
#  HACK: have the files showing in the IDE,under the name 'moduleA_ide'
#
add_custom_target(moduleA_ide SOURCES ${modA_headers})

我不接受这个答案,因为我希望进一步发布CMake提供更语义上正确的方法,然后被接受:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐