【发布时间】:2015-09-11 09:18:39
【问题描述】:
一些库的文件名遵循不同的约定,例如 PAM 库 -- pam_unix.so,而不是 libpam_unix.so。
如何在 CMake 中覆盖目标库文件名以获得类似 new_thing.so 而不是默认的 libnew_thing.so?
【问题讨论】:
标签: cmake
一些库的文件名遵循不同的约定,例如 PAM 库 -- pam_unix.so,而不是 libpam_unix.so。
如何在 CMake 中覆盖目标库文件名以获得类似 new_thing.so 而不是默认的 libnew_thing.so?
【问题讨论】:
标签: cmake
您可以通过以下方式使用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。
由于这与文件名有关,您可能会考虑查看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}"
)
【讨论】: