CMake中CLEAN_DIRECT_OUTPUT属性的现状及用途疑问
关于CMake
CLEAN_DIRECT_OUTPUT 属性的状态说明 CLEAN_DIRECT_OUTPUT 是一个未被CMake官方正式文档化、大概率已被废弃的目标属性——这就是为什么你在CMake官方目标属性页面找不到它,甚至官网站内搜索都显示“无结果”的原因。
它的用途(来自第三方文档记录)
第三方文档曾对这个属性的作用做过说明:
默认情况下,CMake构建库时会生成代码移除所有可能名称的现有库,这是为了支持通过用户选项在静态库和动态库之间切换。但当使用
OUTPUT_NAME构建同名的静态和动态库(使用不同逻辑目标名)时,两个目标会互相删除对方的文件,将CLEAN_DIRECT_OUTPUT属性设为1可避免此问题。
现状与建议
因为这个属性从未获得CMake官方的正式文档支持,它更像是早期版本中的临时解决方案。在现代CMake版本中,更推荐使用官方明确支持的方式来解决同名库冲突问题,比如:
- 为静态库和动态库设置不同的输出目录(通过
ARCHIVE_OUTPUT_DIRECTORY和LIBRARY_OUTPUT_DIRECTORY属性) - 给不同类型的库设置差异化的输出名称后缀(比如静态库加
_static后缀)
不建议在新的CMake项目中依赖CLEAN_DIRECT_OUTPUT,避免因版本迭代导致的兼容性问题。
内容的提问来源于stack exchange,提问作者Louis Langholtz
相关产品推荐
相关产品推荐

