我的顶级CMake项目依赖于some-library,我使用
add_subdirectory (some-library)然后使用
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 ()一起添加的子模块/依赖项项目中,并且只保留在顶级项目中的目标?
发布于 2020-11-18 20:36:33
至少在CMake 3.0中,add_subdirectory ()有可以添加到调用末尾的EXCLUDE_FROM_ALL标志。
add_subdirectory (some-library EXCLUDE_FROM_ALL)这将删除所有目标(包括安装目标),在构建时由默认规则计算,这意味着除非在命令行上显式指定它们,或者在默认规则中包含的目标依赖于这些目标,否则不会生成它们。
由于顶级项目的目标本质上包含在默认规则中(例如,除非您创建了一个也指定了EXCLUDE_FROM_ALL的自定义目标),然后将EXCLUDE_FROM_ALL传递给add_subdirectory (),然后根据依赖项目标进行链接,这将自动生成项目所需的任何依赖项,但忽略了默认install规则中的安装目标。
因此,所有剩下的都是您自己的install()目标-没有您的子目录‘。
https://stackoverflow.com/questions/64900981
复制相似问题