我正在创建一个库,其中所有组件都是独立的(这只是因为它更容易管理 1 个 git repo,真的)。 在该库的根文件夹中,我为库组件的每个部分都有 1 个子文件夹,正好有 3 个“有趣的文件夹”(src、tests、include/components_name)。我在 foreach 循环中对这些文件夹进行了硬编码,以便默认情况下对所有模块完成所有操作。
问题似乎是,其中一个模块被命名为“option_parser”,这确实是相对通用的,并且似乎也被 cmake“保留”,并且对于从它派生的所有东西都是一样的。我试过“option_parser_test”、“option_parser_tests”和其他基于“option_parser_”root 的随机名称。
我在哪里可以学习如何避免 cmake 保留的名称? 我怎么能影响它们到我的二进制文件(因为,我觉得因为构建系统而更改项目名称是愚蠢的。可能是一个足够强大的理由来切换它。)
真的很简单。使用这三个命令查看所有保留字:
cmake --help-command-list
cmake --help-variable-list
cmake --help-property-list
上面Cinder Biscuits的answer应该已经帮到你了
此外,您可能应该阅读 CMake 自己的 有关 CMake 语言的文档,尤其是“变量” 部分中的注释:
注意: CMake 保留标识符:
- 以
(大写、小写或大小写混合)开头,或CMAKE_
- 以
(大写、小写或大小写混合)开头,或_CMAKE_
- 以
开头,后跟任何_
的名称。CMake Command
参见 CMake 语言的文档——特别是关于变量名称的部分,其中指出:
注意: CMake 保留标识符:
- 以
(大写、小写或大小写混合)开头,或CMAKE_
- 以
(大写、小写或大小写混合)开头,或_CMAKE_
- 以
开头,后跟任何_
的名称。CMake Command
查看CMP0037政策的文档,其中声明:
不允许使用一个或多个 CMake 生成器保留的目标名称。其中包括
、all
、clean
和help
。install
与可选功能关联的目标名称,例如
和test
,也可以保留。 CMake 3.10 及以下版本始终保留它们。 CMake 3.11 及更高版本仅在启用相应功能时保留它们(例如,通过包含 CTest 或 CPack 模块)。package
target_link_libraries
具有一个特性,其中项目参数可以是“A debug
、optimized
或 general
关键字紧跟另一个 <item>
.”,在这种情况下,
这样的关键字后面的项目将仅用于相应的构建配置。
关键字对应于调试配置(或在debug
全局属性中命名的配置,如果已设置)。DEBUG_CONFIGURATIONS
关键字对应所有其他配置。optimized
关键字对应所有配置,纯可选。通过创建和链接到 IMPORTED 库目标,可以为每个配置规则实现更高的粒度。这些关键字由该命令立即解释,因此在由生成器表达式生成时没有特殊含义。general
因此,如果您使用这样的目标名称,要链接到它,您可能需要用 generator expression 包装它,如
$<1:debug>
.
如果您希望此类目标的输出文件使用 CMake 内部保留名称,只需使用
OUTPUT_NAME
目标属性.
EXPORT_PROPERTIES
目标属性的文档,其中声明:
以 INTERFACE_ 或 IMPORTED_ 开头的属性是不允许的,因为它们保留供内部 CMake 使用。
从技术上讲,您仍然可以出于自己的目的使用此类名称,但 引用 Ben Boeckel(CMake 维护者之一)的话:
他们有所保留,因为 CMake 不担心“还有其他人在使用这个吗?”如果它想在该命名空间中创建一个新属性。
如果你有
cmake_minimum_required(VERSION 3.11)
并且想使用与这样的名字非常相似的东西但仍然想安全地玩它,只需在名字前加一个下划线即可。