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提供更语义上正确的方法,然后被接受:)

相关文章

在有效期内的苹果开发者账号(类型为个人或者公司账号)。还...
Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台...
苹果在9月13号凌晨(北京时间)发布 iOS 16,该系统的设备可...
计算机图形学--OpenGL递归实现光线追踪
Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Li...