How do you rename a library filename in CMake?
CmakeCmake Problem Overview
Some libraries follow different conventions for their filenames, such as the PAM libs -- pam_unix.so
, not libpam_unix.so
.
How do you override the target library filename in CMake to get something like new_thing.so
instead of the default libnew_thing.so
?
Cmake Solutions
Solution 1 - Cmake
You can change the Prefix, Output Name and Suffix using the set_target_properties()
function and the PREFIX
/ OUTPUT_NAME
/ SUFFIX
property in the following way:
Prefix:
set_target_properties(new_thing PROPERTIES PREFIX "")
Output Name:
set_target_properties(new_thing PROPERTIES OUTPUT_NAME "better_name")
Suffix:
set_target_properties(new_thing PROPERTIES SUFFIX ".so.1")
Solution 2 - Cmake
Since this has to do with the filename, you might think to look at install
for the answer. (And sure enough, there's a RENAME
clause, but that's a red herring.)
Instead, change the target
, using the set_target_properties
command.
Library targets have the built-in property, PREFIX
. The other relevant one is SUFFIX
. These two properties get tacked on to the target name to decide the final filename at install.
For the 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 "")
Let's say you also wanted the filename to have the version:
# 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}"
)