如何让 CMake 在 IDE 中显示不属于任何二进制目标的标头
How to have CMake show headers-that are not part of any binary target-in the IDE?
在我们的工作流程中,我们可以有一个由多个头文件组成的模块A,模块A不产生任何二进制文件(旁注:它显然会被其他模块使用,其中包括模块A中的一些头文件来生成二进制文件)。
一个很好的例子是仅标头库,由于INTERFACE
库的概念,CMake 3 引入了很好的支持(请参阅此 SO 答案和 CMake 的功能文档)。
我们可以从模块 A 中创建一个接口库目标:
add_library(module_A INTERFACE)
这为我们提供了 CMakes 目标的所有漂亮功能(可以将其用作另一个目标的依赖项、导出它、传递转发需求等)。
但是在这种情况下,模块 A 中的标头不会显示在我们的 IDE 中(Xcode,但我们希望它与大多数/所有其他 IDE 相同)。
这被证明是工作流程中的一个主要缺点,因为我们需要在 IDE 中显示组成模块 A 的文件以进行编辑。有可能实现吗?
几个月
后,我没有找到直接列出INTERFACE
库头文件的方法。
由于这个问题仍然有一些观点,这就是我最终所做的(即看起来像目前可用的较小黑客)。
假设模块 A 是一个仅标头库。在 CMakeList 中.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的进一步版本能够提供一种语义上更正确的方法,然后将被接受:)
您可以在 CMake 3.1 中使用新的 target_sources
命令。
add_library(moduleA INTERFACE)
target_include_directories(moduleA INTERFACE ...)
target_sources(moduleA INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/utility.h
${CMAKE_CURRENT_SOURCE_DIR}/moreUtilities.h
)
它也是可传递的。
http://www.cmake.org/cmake/help/v3.1/command/target_sources.html#command:target_sources
CMake 3.3取消了无法导出已INTERFACE_SOURCES目标的限制。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有根的二进制搜索树.保留与其父级的链接
- 多态二进制函数
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- C++用于从流中读取二进制值的任何标准库
- 设置用G 构建的二进制版本的任何方法
- 读取C 中的二进制文件的任何文件
- 错误的任何修复:二进制">>"找不到运算符
- 在运行时动态更新二进制文件(可执行文件)而不停止的任何类型的方法
- 在C 中解析二进制消息.任何有示例的lib
- C/C++:-msse 和 -msse2 标志对二进制文件没有任何影响
- 是否有任何中间件/库可以将二进制或文本数据从64位转换为32位
- 如何仅将 16 位分配给二进制文件中的任何整数,而不是C++中的正常 32 位
- 尝试从 c 执行任何二进制文件
- 如何让 CMake 在 IDE 中显示不属于任何二进制目标的标头
- 这段用于二进制树的代码会引起任何问题吗
- 是否有任何方法可以知道二进制文件的特定部分是否在内存中
- 是否有任何关于布尔值的二进制表示的保证