我正在创建一个库,其中所有组件都是独立的(这只是因为管理1个git repo更容易)。在该库的根文件夹中,库组件的每个部分都有一个子文件夹,正好有3个“有趣的文件夹”(src、tests、include/components_name)。我在foreach循环中对这些文件夹进行了硬编码,以便在默认情况下为所有模块执行所有操作。
问题似乎是,其中一个模块被命名为“option_parser”,这确实是相对通用的,并且似乎也被cmake“保留”,并且对于从它派生的所有内容都是一样的。我尝试了“option_parser_test”、“option_parser_tests”和其他基于“option_parser_”根的随机名称。
在哪里我可以学习如何避免cmake保留的名字?我怎么能影响到我的二进制文件(因为,我觉得因为构建系统而更改项目名称是愚蠢的。这可能是一个足够强的理由来改变它。)
3条答案
按热度按时间xeufq47z1#
其实很简单。使用以下三个命令查看所有保留字:
mwecs4sa2#
上面的Cinder Biscuits的answer应该已经帮助你了。
另外,你可能应该阅读CMake自己的documentation regarding the CMake language,特别是“变量”部分的注解:
**注意:**CMake保留标识符:
CMAKE_
开始(大写、小写或混合大小写),或_CMAKE_
开始(大写、小写或混合大小写),或_
开始,后跟任何CMake Command
的名称。e5nqia273#
找到这些信息的一般方法是谷歌“
site:cmake.org/cmake/help "reserved"
”。话虽如此,这里是为你服务的盘子。变量名
请参阅CMake语言的文档-特别是关于变量名的部分,其中指出:
**注意:**CMake保留标识符:
CMAKE_
开始(大写、小写或混合大小写),或_CMAKE_
开始(大写、小写或混合大小写),或_
开始,后跟任何CMake Command
的名称。这也适用于message contexts。
目标名称
请参阅the CMP0037 policy的文档,其中指出:
不允许由一个或多个CMake生成器保留的目标名称。其中包括
all
,clean
,help
和install
。也可以保留与可选功能(例如
test
和package
)关联的目标名称。CMake 3.10及以下版本始终保留它们。CMake 3.11及以上版本仅在启用相应功能(例如例如通过包括CTest或CPack模块)。还请注意,
target_link_libraries
具有一个特性,其中项参数可以是“* 一个debug
、optimized
或general
关键字,后面紧跟另一个<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 theCMAKE_<LANG>_LINK_GROUP_USING_<FEATURE>
variable和theCMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>
variable的文档,其中指出:功能名称区分大小写,只能包含字母、数字和下划线。所有大写定义的特性名称都保留给CMake自己的内置特性。