2017-10-04 254 views
3

我不太清楚別名表達式的應用。 我明白,我可以寫這樣的事情cmake別名的用處

cmake_minimum_required(VERSION 3.5.1 FATAL_ERROR) 
project(myLibs) 
add_library(${PROJECT_NAME} src/test.cpp) 
add_library(myLibs::myLibs ALIAS ${PROJECT_NAME}) 
... 

然後用

target_link_libraries(${TARGET_NAME} 
    myLibs::myLibs 

在另一個文件到圖書館鏈接到一些可執行文件等等

但我爲什麼要這麼做?我還不如跳過別名定義,只是使用內置庫的TARGETNAME直接

target_link_libraries(${TARGET_NAME} 
myLibs 
  • 爲什麼他們使用::語法任何人都可以向我解釋爲什麼別名存在
  • ?別名不完全是任意的?

回答

2

以您的add_library()爲例,CMake目標的名稱例如:直接鏈接到目標的輸出文件名稱。

因此,ALIAS目標主要用於通過例如爲目標提供更多拼寫或結構化名稱。添加一個「命名空間」。

cmake-developer documentation給出了命名空間以下建議:

當提供進口目標,這些應該被命名空間(因此Foo::前綴); CMake將認識到,傳遞到target_link_libraries()的名稱中包含::的值應該是導入的目標(而不僅僅是庫名稱),並且如果該目標不存在(請參閱策略CMP0028),將生成適當的診斷消息。