2015-06-24 95 views
17

某些庫遵循不同的文件名約定,例如PAM庫 - pam_unix.so,而不是libpam_unix.so如何在CMake中重命名庫文件名?

如何覆蓋CMake中的目標庫文件名以獲得類似new_thing.so而不是默認的libnew_thing.so

回答

23

使用無論是PREFIXOUTPUT_NAME目標屬性:

set_target_properties(new_thing PROPERTIES PREFIX "") 

set_target_properties(new_thing PROPERTIES OUTPUT_NAME "new_thing") 
+3

如果您需要更改文件名的末尾,請使用'SUFFIX'。 – CivFan

10

由於這與文件名,,你可能會想到看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 "") 

比方說,你也想的文件名有版本:

# 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}" 
     )