CMake中OUTPUT_NAME的作用是什么?设置该属性的原因有哪些?
CMake 中设置 OUTPUT_NAME 属性的原因说明
你提到的示例代码是 CMake 用于修改构建目标最终输出文件名的标准语法:
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
设置这个属性的常见原因主要有以下几点:
- 解决同基础名不同类型目标的命名冲突
CMake 不允许同一个项目中存在两个同名的构建目标,如果你需要同时生成同名的静态库和动态库,通常会把两个目标分别命名为hello_static和hello_shared做区分,但最终输出文件时你肯定不希望用户链接的时候还要区分libhello_static.a和libhello_shared.so,给两个目标都设置OUTPUT_NAME "hello"之后,最终输出的文件就会是符合常规命名规范的libhello.a和libhello.so,用户直接用-lhello就能正常链接。 - 统一跨平台输出文件名,屏蔽平台默认规则差异
不同操作系统对二进制文件的默认命名规则不一样:比如 Linux 下库文件默认带lib前缀,Windows 下动态库默认会带版本号后缀,部分编译环境还会自动给调试版生成的文件加_d后缀。通过OUTPUT_NAME可以强制指定输出文件名,保证不同平台下生成的最终文件名称统一,不用适配不同平台的默认规则。 - 不修改目标内部标识的前提下适配发布规范
很多项目内部对构建目标有统一的命名规则,比如按模块加前缀auth_module、pay_module,但对外发布的时候需要去掉内部前缀,改成auth、pay。这种场景直接修改OUTPUT_NAME即可,不需要调整整个 CMakeLists 中所有对该目标的引用,避免改漏引发构建错误。 - 灵活自定义输出文件名,突破默认规则限制
如果你的项目有特殊的命名需求,比如生成的可执行文件不需要带任何前缀后缀、或者要加自定义的标识,都可以通过OUTPUT_NAME直接指定,比修改全局的前缀/后缀规则灵活度更高。
内容的提问来源于stack exchange,提问作者anti-gravity
相关产品推荐
相关产品推荐

