如何使用CMake获取目标库的基本名称?
我正在使用CMake变量名$ {lib}创建一个库,如
set(lib lib)
add_library(${lib} ...
我需要生成的库文件的基名。
CMake将创建一个文件名为<prefix>lib.<extension>
的库,其中<prefix>
和<extension>
都是特定于平台的。
我已经尝试了生成器$<TARGET_FILE_NAME:${lib}>
,它为我提供了全名,因为我需要在COMMAND中使用它,这是CMake允许生成器的少数几个地方之一。
要使用CMake删除扩展程序,我需要使用GET_FILENAME_COMPONENT,如
GET_FILENAME_COMPONENT(<var> <filename> NAME_WE)
但这用于设置变量<var>
(以正常的CMake方式),并且生成器在那里不起作用。
(如果你问我,CMake语言是不规则的憎恶。作为一个概念,CMake非常酷。)
答案 0 :(得分:2)
我将get_property与get_filename_component一起使用,这对我有用:
get_property(lib_loc TARGET lib PROPERTY LOCATION)
get_filename_component(lib_we ${lib_loc} NAME_WE)