使用CMake获取目标文件名而无需扩展名

tho*_*i56 6 cmake

如何使用CMake获取目标库的基本名称?

我正在使用CMake变量名$ {lib}创建一个库,如下所示:

set(lib lib)
add_library(${lib} ...
Run Code Online (Sandbox Code Playgroud)

我需要生成的库文件的基本名称。

CMake将使用文件名创建库,<prefix>lib.<extension>其中<prefix><extension>都是平台特定的。

我已经尝试过使用生成器$<TARGET_FILE_NAME:${lib}>给我全名,它可以工作,因为我需要在COMMAND中使用它,这是CMake允许生成器的少数几个地方之一。

要使用CMake删除扩展名,我需要使用GET_FILENAME_COMPONENT,如

GET_FILENAME_COMPONENT(<var> <filename> NAME_WE)
Run Code Online (Sandbox Code Playgroud)

但这用于设置变量<var>(以常规CMake方式),并且生成器在那里不起作用。

(如果您问我,CMake语言是不规则的可恶。从概念上讲,CMake非常酷。)

小智 6

我将get_propertyget_filename_component一起使用,这对我有用:

get_property(lib_loc TARGET lib PROPERTY LOCATION)
get_filename_component(lib_we ${lib_loc} NAME_WE)
Run Code Online (Sandbox Code Playgroud)


sak*_*kra 2

查询目标的OUTPUT_NAME属性:

get_target_property(_baseName lib OUTPUT_NAME)
Run Code Online (Sandbox Code Playgroud)

  • “NOT FOUND” - 这可能表明如果您不将其设置为任何内容(如我想要默认值),它是空的? (3认同)