【问题标题】:How do you rename a library filename in CMake?如何在 CMake 中重命名库文件名?
【发布时间】:2015-09-11 09:18:39
【问题描述】:

一些库的文件名遵循不同的约定,例如 PAM 库 -- pam_unix.so,而不是 libpam_unix.so

如何在 CMake 中覆盖目标库文件名以获得类似 new_thing.so 而不是默认的 libnew_thing.so

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您可以通过以下方式使用set_target_properties() 函数和PREFIX / OUTPUT_NAME / SUFFIX 属性更改前缀、输出名称和后缀:

    前缀:

        set_target_properties(new_thing PROPERTIES PREFIX "")
    

    输出名称:

        set_target_properties(new_thing PROPERTIES OUTPUT_NAME "better_name")
    

    后缀:

        set_target_properties(new_thing PROPERTIES SUFFIX ".so.1")
    

    【讨论】:

    • 请注意,这也适用于生成器表达式。因此,您可以使用set_target_properties(new_thing PROPERTIES OUTPUT_NAME "new_thing$<$<CONFIG:Debug>:d>"d 添加到new_thing 以构建多配置项目的Debug
    【解决方案2】:

    由于这与文件名有关,您可能会考虑查看install 来寻找答案。 (果然,有一个 RENAME 子句,但这是一个红鲱鱼。)

    改为使用set_target_properties 命令更改target

    库目标具有内置属性PREFIX。另一个相关的是SUFFIX。这两个属性被附加到目标名称上,以决定安装时的最终文件名。

    对于 OQ:

    # By default, the library filename will be `libnew_thing.so`
    add_library(new_thing ${NEW_THING_SRCS})
    
    # This changes the filename to `new_thing.so`
    set_target_properties(new_thing PROPERTIES PREFIX "")
    

    假设您还希望文件名具有版本:

    # This then changes the filename to `new_thing.so.1`,
    # if the version is set to "1".
    set_target_properties(new_thing
            PROPERTIES PREFIX ""
                       SUFFIX ".so.${NEW_THING_VER}"
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 2023-01-24
      • 2016-05-20
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多