JPN*_*gon 4 namespaces packages cmake libraries
似乎CMake不支持定义导出或安装的目标的名称空间与相应库文件的名称之间的关系.
因此,例如,CMake可以轻松创建包含明确命名目标的包MyOrg::MyLibrary(例如使用和命令的NAMESPACE选项,但实际的.a,.lib,.so或.dll文件仍然可以全局分隔名称如:名称空间不进入库文件名.export(EXPORT ...)install(EXPORT ...)libMyLibrary.a
当然可以自己将命名空间应用于目标; 在上面的示例中,您可以命名目标MyOrgMyLibrary,从而导致库文件名,例如"libMyOrgMyLibrary.a".我认为这是好的,除了这使得该NAMESPACE选项基本上没用(或者你最终得到了命名的目标MyOrg::MyOrgMyLibrary),让我觉得我错过了什么.
有没有办法覆盖生成的库的名称?或者使用CMake确保库文件获得明确名称的"正确"方式是什么?
整个名称空间的东西比名称暗示的要强大得多.它实际上只不过是一个命名约定.我看到大型框架中的主要优点是附带了很多库(比如Qt),但是你是对的,它本身并不太有用.
另请注意,该机制仅关注避免CMake脚本中的名称冲突,而不是文件系统上的名称冲突.后者需要在另一个层面上解决.避免这些的最简单方法当然是将库安装到子目录中.那么你几乎只需要担心你自己的项目中的nameclashes.不幸的是,这种方法有其自身的缺点.在Unix上,不鼓励用户创建子目录/usr/lib,除了存储特定于应用程序的库(感谢@JPNotADragon 指出这一点).
否则,您已经提到的常用技术如前缀应用.
我同意,这个功能并不像人们希望的那么强大.但话说回来,nameclashes是一个非常重要的问题,最终合理的命名约定可能仍然是最好的解决方案.
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |