使用CMake获取目标文件名,不带扩展名

问题描述:

如何使用CMake获取目标库的基本名称?使用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,作为一个概念,是很酷。)

查询目标的OUTPUT_NAME属性:

get_target_property(_baseName lib OUTPUT_NAME) 
+0

“NOT FOUND” - 这或许表明,如果你不将它设置为任何东西(如我想的默认值)是抢先ÿ? – thoni56

我用get_propertyget_filename_component这个工作对我来说:

get_property(lib_loc TARGET lib PROPERTY LOCATION) 
get_filename_component(lib_we ${lib_loc} NAME_WE) 
+0

自2.8.12起已弃用。由于CMake运行时LOCATION是“猜测”的。但是在实际的编译时间之前,你不能完全知道lib将会在哪里结束。因此,使用$ 是正确的方法。有关详细信息,请参阅CMP0026。 – Joakim