CMake保留了哪些名称?

问题描述 投票:0回答:3

我正在创建一个库,其中所有组件都是独立的(这只是因为它更容易管理 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 reserved-words
3个回答
2
投票

真的很简单。使用这三个命令查看所有保留字:

cmake --help-command-list
cmake --help-variable-list
cmake --help-property-list

0
投票

上面Cinder Biscuitsanswer应该已经帮到你了

此外,您可能应该阅读 CMake 自己的 有关 CMake 语言的文档,尤其是“变量” 部分中的注释:

注意: CMake 保留标识符:

  • CMAKE_
    (大写、小写或大小写混合)开头,或
  • _CMAKE_
    (大写、小写或大小写混合)开头,或
  • _
    开头,后跟任何
    CMake Command
    的名称。

0
投票

对于变量名

参见 CMake 语言的文档——特别是关于变量名称的部分,其中指出:

注意: CMake 保留标识符:

  • CMAKE_
    (大写、小写或大小写混合)开头,或
  • _CMAKE_
    (大写、小写或大小写混合)开头,或
  • _
    开头,后跟任何
    CMake Command
    的名称。

对于目标名称

查看CMP0037政策的文档,其中声明:

不允许使用一个或多个 CMake 生成器保留的目标名称。其中包括

all
clean
help
install

与可选功能关联的目标名称,例如

test
package
,也可以保留。 CMake 3.10 及以下版本始终保留它们。 CMake 3.11 及更高版本仅在启用相应功能时保留它们(例如,通过包含 CTestCPack 模块)。

还请注意,

target_link_libraries
具有一个特性,其中项目参数可以是“A
debug
optimized
general
关键字紧跟另一个
<item>
.
”,在这种情况下,

这样的关键字后面的项目将仅用于相应的构建配置。

debug
关键字对应于调试配置(或在
DEBUG_CONFIGURATIONS
全局属性中命名的配置,如果已设置)。
optimized
关键字对应所有其他配置。
general
关键字对应所有配置,纯可选。通过创建和链接到 IMPORTED 库目标,可以为每个配置规则实现更高的粒度。这些关键字由该命令立即解释,因此在由生成器表达式生成时没有特殊含义。

因此,如果您使用这样的目标名称,要链接到它,您可能需要用 generator expression 包装它,如

$<1:debug>
.

如果您希望此类目标的输出文件使用 CMake 内部保留名称,只需使用

OUTPUT_NAME
目标属性.

用于导出属性名称

查看

EXPORT_PROPERTIES
目标属性的文档,其中声明:

以 INTERFACE_ 或 IMPORTED_ 开头的属性是不允许的,因为它们保留供内部 CMake 使用。

从技术上讲,您仍然可以出于自己的目的使用此类名称,但 引用 Ben Boeckel(CMake 维护者之一)的话:

他们有所保留,因为 CMake 不担心“还有其他人在使用这个吗?”如果它想在该命名空间中创建一个新属性。

如果你有

cmake_minimum_required(VERSION 3.11)
并且想使用与这样的名字非常相似的东西但仍然想安全地玩它,只需在名字前加一个下划线即可。

© www.soinside.com 2019 - 2024. All rights reserved.