加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 02:04:32 所属栏目:百科 来源:网络整理
导读:在我们的工作流程中,我们可以有一个由几个头文件组成的模块A,模块A不产生任何二进制文件(注意:它显然将被其他模块使用,包括模块A中的一些头文件以生成二进制文件) 。 一个很好的例子是一个只有标题的库,由于INTERFACE库的概念(见this SO answer和CMake
在我们的工作流程中,我们可以有一个由几个头文件组成的模块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提供更语义上正确的方法,然后被接受:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读