首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止CMake从add_subdirectory()包含的项目中安装()add_subdirectory目标?

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

Stack Overflow用户
提问于 2020-11-18 20:36:33
回答 1查看 600关注 0票数 3

我的顶级CMake项目依赖于some-library,我使用

代码语言:javascript
复制
add_subdirectory (some-library)

然后使用

代码语言:javascript
复制
target_link_libraries (my-project PRIVATE some-library)

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

但是,如果some-library也定义了一些install (TARGETS some-library ...)指令,这些指令就会与我的项目目标的安装一起集中在一起,因为有几个子目录依赖项在系统的安装目录中创建了一堆额外的、不必要的cruft,我想要避免这种情况。

如何使CMake将任何install (...)目标排除在与add_subdirectory ()一起添加的子模块/依赖项项目中,并且只保留在顶级项目中的目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 20:36:33

至少在CMake 3.0中,add_subdirectory ()有可以添加到调用末尾的EXCLUDE_FROM_ALL标志。

代码语言:javascript
复制
add_subdirectory (some-library EXCLUDE_FROM_ALL)

这将删除所有目标(包括安装目标),在构建时由默认规则计算,这意味着除非在命令行上显式指定它们,或者在默认规则中包含的目标依赖于这些目标,否则不会生成它们。

由于顶级项目的目标本质上包含在默认规则中(例如,除非您创建了一个也指定了EXCLUDE_FROM_ALL的自定义目标),然后将EXCLUDE_FROM_ALL传递给add_subdirectory (),然后根据依赖项目标进行链接,这将自动生成项目所需的任何依赖项,但忽略了默认install规则中的安装目标

因此,所有剩下的都是您自己的install()目标-没有您的子目录‘。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64900981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档