简而言之:
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 中提出命名约定,但至少命名空间和组件的第一个字母的大写字母似乎很漂亮很常见,所以我想知道是否有一些指导方针我应该在未来的项目中遵循。
我想使用 cmake 创建一个项目项目,它的访问方式与 Poco 使用的方式类似。我发现使用 Poco 作为示例很拥挤且难以理解,因此我尝试创建一个最小版本,没有宏,以便我可以看到发生了什么。我在这里为这个例子构建了一个存储库。
https://github.com/markeastwood82/nomnoms
这个,以及下面写的内容,是我在阅读/解决“现代 CMake”几天后如何解决这个问题的最佳猜测,除了它不太有效。基本上我有一个图书馆noms
用组件fruit
和veg
我想从应用程序动态链接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)