如何在CMake中重命名库文件名?

Civ*_*Fan 44 cmake

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

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

tam*_*nez 62

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

字首:

    set_target_properties(new_thing PROPERTIES PREFIX "")
Run Code Online (Sandbox Code Playgroud)

输出名称:

    set_target_properties(new_thing PROPERTIES OUTPUT_NAME "better_name")
Run Code Online (Sandbox Code Playgroud)

后缀:

    set_target_properties(new_thing PROPERTIES SUFFIX ".so.1")
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这也适用于生成器表达式。因此,您可以使用`set_target_properties(new_thing PROPERTIES OUTPUT_NAME“ new_thing $ <$$ CONFIG:Debug>:d>”`向`new_thing`中添加`d`来进行多配置项目的`Debug`构建。 (3认同)

Civ*_*Fan 19

由于这与文件名有关,您可能会考虑寻找install答案.(果然,有一个RENAME条款,但这是一个红色的鲱鱼.)

而是target使用set_target_properties命令更改.

图书馆目标具有内置属性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 "")
Run Code Online (Sandbox Code Playgroud)

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

# 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}"
        )
Run Code Online (Sandbox Code Playgroud)