gpt4 book ai didi

cmake - 如何防止 CMake 从 add_subdirectory() 包含的项目中安装 ()-ing 目标?

转载 作者:行者123 更新时间:2023-12-05 03:47:15 25 4
gpt4 key购买 nike

我的顶级 CMake 项目依赖于 some-library,我使用它包含在我的项目中

add_subdirectory (some-library)

然后使用

链接到它
target_link_libraries (my-project PRIVATE some-library)

我还想添加 install (TARGETS my-rpoject ...) 指令,这样我的项目就可以通过生成的任何构建系统安装到系统中(例如通过 sudo ninja如果使用 -GNinja 生成器,请安装

但是,如果 some-library 定义了一些 install (TARGETS some-library ...) 指令,它们会与我的项目目标的安装,给定了一些子目录依赖性,在系统的安装目录中创建了一堆额外的、不必要的东西,我想避免这些东西。

如何让 CMake 从使用 add_subdirectory () 添加的子模块/依赖项项目中排除任何 install (...) 目标,并只保留那些在我的顶部级项目?

最佳答案

至少从 CMake 3.0 开始,add_subdirectory ()EXCLUDE_FROM_ALL可以添加到调用末尾的标志。

add_subdirectory (some-library EXCLUDE_FROM_ALL)

这会删除所有目标(包括安装目标)在构建时根据默认规则进行评估,这意味着它们不会被构建,除非它们在命令行上明确指定或以其他方式依赖 包含在默认规则中的目标。

由于您的顶级项目的目标固有地包含在默认规则中(除非您创建一个还指定了 EXCLUDE_FROM_ALL 的自定义目标,例如),然后传递 EXCLUDE_FROM_ALLadd_subdirectory ()然后链接到依赖项目标将自动构建您的项目所需的任何依赖项,如您所料,但从默认的install中省略安装目标规则。

所以,剩下的都是自己的install() targets - 没有你的子目录。

关于cmake - 如何防止 CMake 从 add_subdirectory() 包含的项目中安装 ()-ing 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64900981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com