如何仅构建CMake中实际依赖的库

如何仅构建CMake中实际依赖的库,cmake,Cmake,我有一个库,它作为几个应用程序的外部引入,并使用add\u子目录包含。由于使用的灵活性,它有四种构建风格:GUI/CLI和shared/static。GUI应用程序倾向于构建GUI风格,因为它生成的用户警告显示为弹出对话框。但是,它也被一些命令行应用程序使用,这些应用程序使用在终端上生成用户警告的CLI版本。一些应用程序使用共享版本是因为它们使用使用相同库的其他库,并且需要共享资源,例如输出日志文件句柄。有些应用程序使用静态版本,因为它们是我们希望作为独立二进制文件分发的小型实用程序,不需要依赖

我有一个库,它作为几个应用程序的外部引入,并使用
add\u子目录
包含。由于使用的灵活性,它有四种构建风格:GUI/CLI和shared/static。GUI应用程序倾向于构建GUI风格,因为它生成的用户警告显示为弹出对话框。但是,它也被一些命令行应用程序使用,这些应用程序使用在终端上生成用户警告的CLI版本。一些应用程序使用共享版本是因为它们使用使用相同库的其他库,并且需要共享资源,例如输出日志文件句柄。有些应用程序使用静态版本,因为它们是我们希望作为独立二进制文件分发的小型实用程序,不需要依赖项

如果我正在构建一个只使用这四种风格中的一种的CMake项目,那么我真的只想构建库中的一种风格。然而,尽管如此,CMake仍坚持建造所有四座,这完全是浪费时间


如果库被明确列为正在构建的其他对象的依赖项,我如何向CMake标记该库只应被构建?

对于每个目标,在库的CMakeLists.txt中将
EXCLUDE\u FROM\u ALL
属性设置为
TRUE
。只有在实际需要的情况下才会建造

set_target_properties(MyLib PROPERTIES
    EXCLUDE_FROM_ALL TRUE
)

您是否尝试过添加子目录(从所有子目录中排除子目录)?
cmake--build--target
@Corristo,这似乎不起作用,但将其添加为库的每种风格的目标属性确实起到了作用。请写下来作为回答,这样我就可以接受了。