简而言之::
对于cmake库目标是否有任何首选的命名约定--特别是在使用名称空间时?
注:
除非真的有客观的理由,否则我不是在问个人喜好,而是问是否有“官方”(如由kitware推荐的)或既定的(可能会偏离)的惯例。
详细信息:
假设我有一个库/框架foo,它有单独的组件bar和baz。到目前为止,我的命名约定如下:
add_library(foo-bar src1.cpp, scr2.cpp)
add_library(foo-baz src3.cpp, src4.cpp)现在,我想使用命名空间(::)约定添加别名目标。例如。
add_library(Foo::Bar ALIAS foo-bar)
add_library(Foo::Baz ALIAS foo-baz)(当然,这个问题也扩展到导出集,但我不想让问题复杂化)
然而,我无法真正发现的是,对于这些目标是否有一个首选的甚至官方的命名约定。
我见过的东西:
我猜主要的问题是,库通常没有命名约定,因此很难在CMake中提出命名约定,但至少命名空间和组件的首字母的大写化似乎相当常见,因此我想知道,对于未来的项目,是否应该遵循一些指导方针。
发布于 2018-01-30 16:19:56
文档给出了关于命名空间的以下建议:
当提供导入的目标时,这些应该是名称空间(因此是
Foo::前缀);CMake将认识到传递给以其名称包含::的target_link_libraries()的值应该是导入的目标(而不仅仅是库名称),如果不存在该目标,则会生成适当的诊断消息(参见策略CMP0028)。
政策文件在名称空间的使用中使用了“通用模式”:
双冒号的使用是命名空间
IMPORTED目标和ALIAS目标的常见模式。在计算目标的链接依赖项时,每个依赖项的名称可以是目标,也可以是磁盘上的文件。以前,如果没有找到具有匹配名称的目标,则该名称被视为引用磁盘上的文件。这可能会导致混淆错误消息,如果有一个错误的什么应该是一个目标名称。
不,没有CMake特定于命名库目标的约定。但是,由于默认情况下将名称作为目标的输出名称:
lib前缀,因为这是由CMake自动添加的,这取决于您使用的编译项目的平台。来自CMake教程
你能得到的最正式的来源可能是“掌握CMake”一书的摘录,这是由Kitware和Bill编写的。
这本书的教程都对组件/目标名称使用CamelCase而不使用命名空间。
参考资料
https://stackoverflow.com/questions/48524359
复制相似问题