2017-08-05 112 views
0

CMake的find_package文件说:通过提供变量和进口由封装本身记载目标在CMake中,如何在调用find_package后找到导入的目标?

当包发现包特有的信息。

如果我有一个图书馆,ABCD我可以开始使用find_package,提供的CMake可以找到一个合适的ABCDConfig.cmake文件。然后它创建如上所述的导入目标(例如abcd10 abcdExtra)。

然后,我可以编译和对这些库的链接,像这样:

target_include_directories(mytarget abcd10 abcdExtra) 
target_link_libraries(mytarget abcd10 abcdExtra) 

的问题是,这取决于怎么说ABCDConfig.cmake文件,别人写的内容,该目标的名称可能是几乎任何东西(例如abcdlib,abcdX64,Foobar,...),即使它可能是完全相同的库ABCD

我已阅读了大部分文档,但看不到任何获取导入目标的方法,因此看起来我必须知道所有常用导入目标名称是什么,并单独检查它们。这对我来说似乎有点不合理。我在这里错过了什么吗?如何在不知道这些细节的情况下,加载并链接由不同软件包管理器(甚至是自己编写文件的人)生成的库?

回答

2

如何在不知道这些细节的情况下加载并链接由不同包管理器(甚至是自己编写ABCDConfig.cmake文件的人)生成的库?

你不行。

唯一的办法就是阅读文档关于具体的ABCDConfig.cmake文件。这些文件通常写在文件的开头(作为注释)。

CMake没有强制执行任何关于ABCDConfig.cmake文件,所以只有文件的作者知道如何使用它。

虽然CMake为生成配置文件提供了一些支持(请参阅install(EXPORTS)命令),但只有项目作者知道导入目标的含义。

相关问题