2015-09-20 1208 views
2

如何使用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,作爲一個概念,是很酷。)

回答

0

查詢目標的OUTPUT_NAME屬性:

get_target_property(_baseName lib OUTPUT_NAME) 
+0

「NOT FOUND」 - 這或許表明,如果你不將它設置爲任何東西(如我想的默認值)是搶先ÿ? – thoni56

1

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