相关疑难解决方法(0)

cmake 中组件和命名空间的命名约定

简而言之:

cmake 库目标是否有任何首选命名约定 - 特别是在使用命名空间时?

笔记:

除非真的有客观原因,否则我不是在问个人喜好,而是是否有“官方”(例如套件推荐)或已建立(可能偏离)的惯例。

细节:

假设我有一个库/框架foo,其中包含单独的组件barbaz. 到目前为止,我的命名约定是这样的:

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)

(当然,这个问题也延伸到导出集,但我不想让问题复杂化)
然而,我无法真正发现的是,这些目标是否有首选甚至官方的命名约定。

我见过的东西:

  • 命名空间部分:
    • 有些项目似乎大写第一个字母,有些不是(前者似乎更常见)
  • 组成部分:
    • 在某些项目中,组件名称与二进制名称相同
    • 有或没有“lib”前缀(libfoo-bar vs foo-bar)
    • 有或没有命名空间(foo-bar vs bar)
    • 有些项目将第一个字母大写
    • 一些项目使用 CamelCase some snake_case,即使二进制文件或项目名称不遵循这些约定。

我想主要问题是一般没有库的命名约定,因此很难在 CMake 中提出命名约定,但至少命名空间和组件的第一个字母的大写字母似乎很漂亮很常见,所以我想知道是否有一些指导方针我应该在未来的项目中遵循。

naming-conventions cmake

9
推荐指数
1
解决办法
9866
查看次数

如何在 cmake 中使用 COMPONENTS 配置项目

我想使用 cmake 创建一个项目项目,它的访问方式与 Poco 使用的方式类似。我发现使用 Poco 作为示例很拥挤且难以理解,因此我尝试创建一个最小版本,没有宏,以便我可以看到发生了什么。我在这里为这个例子构建了一个存储库。

https://github.com/markeastwood82/nomnoms

这个,以及下面写的内容,是我在阅读/解决“现代 CMake”几天后如何解决这个问题的最佳猜测,除了它不太有效。基本上我有一个图书馆noms用组件fruitveg我想从应用程序动态链接munch。我可以安装该noms库,但无法使用munch. 有人可以帮我把这个东西放在一起吗?

这两个项目的结构如下:

noms
|---- CMakeLists.txt
+---- fruit
|     |---- CMakeLists.txt
|     |---- fruit-config.cmake.in
|     +---- src
|     |     |----apple.cpp
|     |
|     +---- include/noms/fruit
|           |----apple.h
|
+---- veg
      |---- CMakeLists.txt
      |---- veg-config.cmake.in
      +---- src
      |     |---- asparagus.cpp
      |
      +---- include/noms/veg
            |---- asparagus.h
Run Code Online (Sandbox Code Playgroud)
munch
|---- CmakeLists.txt
+---- src
      |---- main.cpp

Run Code Online (Sandbox Code Playgroud)

该文件noms/CMakeLists.txt包含以下内容。

cmake_minimum_required(VERSION 3.0)
set(project noms)
set(version …
Run Code Online (Sandbox Code Playgroud)

c++ components cmake

4
推荐指数
1
解决办法
5896
查看次数

标签 统计

cmake ×2

c++ ×1

components ×1

naming-conventions ×1