Mik*_*eMB 9 naming-conventions cmake
简而言之:
cmake 库目标是否有任何首选命名约定 - 特别是在使用命名空间时?
笔记:
除非真的有客观原因,否则我不是在问个人喜好,而是是否有“官方”(例如套件推荐)或已建立(可能偏离)的惯例。
细节:
假设我有一个库/框架foo,其中包含单独的组件bar和baz. 到目前为止,我的命名约定是这样的:
add_library(foo-bar src1.cpp, scr2.cpp)
add_library(foo-baz src3.cpp, src4.cpp)
Run Code Online (Sandbox Code Playgroud)
现在我想使用命名空间 ( ::) 约定添加别名目标。例如
add_library(Foo::Bar ALIAS foo-bar)
add_library(Foo::Baz ALIAS foo-baz)
Run Code Online (Sandbox Code Playgroud)
(当然,这个问题也延伸到导出集,但我不想让问题复杂化)
然而,我无法真正发现的是,这些目标是否有首选甚至官方的命名约定。
我见过的东西:
我想主要问题是一般没有库的命名约定,因此很难在 CMake 中提出命名约定,但至少命名空间和组件的第一个字母的大写字母似乎很漂亮很常见,所以我想知道是否有一些指导方针我应该在未来的项目中遵循。
Flo*_*ian 10
该cmake-developer文件提供了有关命名空间的以下建议:
当提供导入的目标时,这些应该是命名空间的(因此是
Foo::前缀);CMake 将识别传递给target_link_libraries()包含::在其名称中的值应该是导入目标(而不仅仅是库名称),并且如果该目标不存在,将生成适当的诊断消息(请参阅策略CMP0028)。
而CMP0028政策文件说,在使用命名空间的“通用模式”:
双冒号的使用是用于命名空间
IMPORTED目标和ALIAS目标的常见模式。在计算目标的链接依赖时,每个依赖的名称可以是目标,也可以是磁盘上的文件。以前,如果未找到具有匹配名称的目标,则该名称被认为是指磁盘上的文件。如果目标名称中存在拼写错误,这可能会导致混淆错误消息。
不,对于库目标的命名没有 CMake 特定的约定。但由于名称默认为目标的输出名称:
lib前缀,因为这是由 CMake 根据您编译项目的平台自动添加的来自 CMake 教程
您可以获得的最官方来源可能是来自 Kitware 的 Ken Martin 和 Bill Hoffman 撰写的“掌握 CMake”一书的摘录。
书中的教程都使用 CamelCase 并且没有组件/目标名称的命名空间。
参考
| 归档时间: |
|
| 查看次数: |
9866 次 |
| 最近记录: |