CMake保留哪些名字?

qcbq4gxm  于 2023-04-30  发布在  其他
关注(0)|答案(3)|浏览(152)

我正在创建一个库,其中所有组件都是独立的(这只是因为管理1个git repo更容易)。在该库的根文件夹中,库组件的每个部分都有一个子文件夹,正好有3个“有趣的文件夹”(src、tests、include/components_name)。我在foreach循环中对这些文件夹进行了硬编码,以便在默认情况下为所有模块执行所有操作。
问题似乎是,其中一个模块被命名为“option_parser”,这确实是相对通用的,并且似乎也被cmake“保留”,并且对于从它派生的所有内容都是一样的。我尝试了“option_parser_test”、“option_parser_tests”和其他基于“option_parser_”根的随机名称。
在哪里我可以学习如何避免cmake保留的名字?我怎么能影响到我的二进制文件(因为,我觉得因为构建系统而更改项目名称是愚蠢的。这可能是一个足够强的理由来改变它。)

xeufq47z

xeufq47z1#

其实很简单。使用以下三个命令查看所有保留字:

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

mwecs4sa2#

上面的Cinder Biscuitsanswer应该已经帮助你了。
另外,你可能应该阅读CMake自己的documentation regarding the CMake language,特别是“变量”部分的注解:

**注意:**CMake保留标识符:

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

e5nqia273#

找到这些信息的一般方法是谷歌“site:cmake.org/cmake/help "reserved"”。话虽如此,这里是为你服务的盘子。

变量名

请参阅CMake语言的文档-特别是关于变量名的部分,其中指出:

**注意:**CMake保留标识符:

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

这也适用于message contexts

目标名称

请参阅the CMP0037 policy的文档,其中指出:
不允许由一个或多个CMake生成器保留的目标名称。其中包括allcleanhelpinstall
也可以保留与可选功能(例如testpackage)关联的目标名称。CMake 3.10及以下版本始终保留它们。CMake 3.11及以上版本仅在启用相应功能(例如例如通过包括CTestCPack模块)。
还请注意,target_link_libraries具有一个特性,其中项参数可以是“* 一个debugoptimizedgeneral关键字,后面紧跟另一个<item>。* ”,在此情况下,
此类关键字后面的项将仅用于相应的生成配置。debug关键字对应于Debug配置(或者DEBUG_CONFIGURATIONS全局属性中命名的配置,如果已设置)。optimized关键字对应于所有其他配置。general关键字对应于所有配置,并且是纯可选的。通过创建并链接到IMPORTED library targets,可以为每配置规则实现更高的粒度。这些关键字由该命令立即解释,因此在由生成器表达式生成时没有特殊意义。
因此,如果您使用这样的目标名称,要链接到它,您可能需要使用generator expression(如$<1:debug>) Package 它。
如果您希望这样一个目标的输出文件使用within-CMake-reserved名称,只需使用the OUTPUT_NAME target property即可。

导出属性名

请参阅the EXPORT_PROPERTIES target property的文档,其中规定:
不允许使用以INTERFACE_或IMPORTED_开头的属性,因为它们是保留给内部CMake使用的。
从技术上讲,您仍然可以使用这些名称用于您自己的目的,但是to quote Ben Boeckel(CMake维护者之一):
它们是保留的,因为CMake不担心“还有其他人在使用这个吗?”“如果它想在该命名空间中创建一个新属性。
如果您有cmake_minimum_required(VERSION 3.11),并且希望使用与这样的名称非常相似的名称,但仍然希望安全起见,只需在名称前添加下划线。

文件集名称

有关target_sources的文件集签名的FILE_SET参数,请参阅文档,该参数声明:
要创建或添加到的文件集的名称。它必须只包含字母、数字和下划线。以大写字母开头的名称保留给CMake预定义的内置文件集。预定义的集合名称仅限于与可接受类型匹配的集合名称。所有其他集合名称不得以大写字母或下划线开头。

链接功能

请参阅$<LINK_LIBRARY:feature,library-list>生成器表达式、for the CMAKE_<LANG>_LINK_GROUP_USING_<FEATURE> variablethe CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE> variable的文档,其中指出:
功能名称区分大小写,只能包含字母、数字和下划线。所有大写定义的特性名称都保留给CMake自己的内置特性。

相关问题