使用CMake获取不带扩展名的目标文件名
如何使用CMake获取目标库的basename 我正在使用CMake变量名${lib}创建一个库,如中所示使用CMake获取不带扩展名的目标文件名,cmake,Cmake,如何使用CMake获取目标库的basename 我正在使用CMake变量名${lib}创建一个库,如中所示 set(lib lib) add_library(${lib} ... 我需要生成的库文件的basename CMake将创建一个文件名为lib.的库,其中和都是特定于平台的 我尝试了生成器$,它给了我全名,因为我需要在命令中使用它,这是CMake允许生成器的少数地方之一 要使用CMake删除扩展名,我需要使用GET\u FILENAME\u组件,如中所示 GET_FILENAME_CO
set(lib lib)
add_library(${lib} ...
我需要生成的库文件的basename
CMake将创建一个文件名为lib.
的库,其中
和
都是特定于平台的
我尝试了生成器$
,它给了我全名,因为我需要在命令中使用它,这是CMake允许生成器的少数地方之一
要使用CMake删除扩展名,我需要使用GET\u FILENAME\u组件,如中所示
GET_FILENAME_COMPONENT(<var> <filename> NAME_WE)
GET\u FILENAME\u组件(NAME\u WE)
但这用于设置变量
(以正常的CMake方式),生成器在那里不工作
(如果你问我的话,CMake语言是一种非常讨厌的语言。作为一个概念,CMake非常酷。)查询目标的属性:
get_target_property(_baseName lib OUTPUT_NAME)
我使用了,这对我很有用:
get_property(lib_loc TARGET lib PROPERTY LOCATION)
get_filename_component(lib_we ${lib_loc} NAME_WE)
“未找到”-这可能表示如果未将其设置为任何值(如在“我想要默认值”中),则该值为空?自2.8.12以来,该值已被弃用。因为在运行CMake时位置是“猜测”的。但在实际编译时之前,您无法完全知道lib将在哪里结束。因此,使用$是正确的方法。详见CMP0026。