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提供更语义上正确的方法,然后被接受:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |