2017-10-04 257 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),将生成适当的诊断消息。