Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMake获取不带扩展名的目标文件名_Cmake - Fatal编程技术网

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

使用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

如何使用CMake获取目标库的basename

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

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。