如何从其他cmake的模块

问题描述:

添加静态库假设我有2个cmake的模块如何从其他cmake的模块

  1. MyStaticLib这是编译后会是一个静态库
  2. Connector这是一个共享库或可执行文件,它应该使用MyStaticLib里面。

所以,我想补充MyStaticLibConnector,但不能简单地把myStaticLib.a + headers在某些文件夹,但是从Connector参考MyStaticLib模块,所以当Connector编译将建立从源lib和使用它。

什么是在cmake中这样做的正确方法?

+1

当连接器编译它时,**将从源**构建lib并使用它。 - 在'Connector'中,您可以使用add_subdirectory()来添加'MyStaticLib'的源目录。或者,您可以使用[ExternalProject_Add](https://cmake.org/cmake/help/v3.7/module/ExternalProject.html)。链接到编译的库取决于您用于构建它的方法。 – Tsyvarev

+0

@Tsyvarev谢谢,具有二进制路径集的'add_subdirectory'正如我所料。如果你将它作为答案,而不是评论,我会很乐意接受它。 –

在独立项目的情况下(MyStaticLib用于其他项目,有它自己的发布周期),你可以使用:

find_library

  • 构建,测试和安装MyStaticLib到您的文件系统
  • 添加find_libraryConnectorCMakeList.txt

find_package

  • 与之相似以上,但MyStaticLib提供更多的信息

ExternalProject

  • 如果您想通过Connector
  • 触发使用前任何附加操作(建设,补丁)上 MyStaticLib
  • 给你最多的可能性

对于依赖项目(MyStaticLib是子项目Connector),只需将其作为子目录Connector(它必须是子目录)即可。

+0

我无法在我的情况下使用find_library和find_package。我认为这个指令已经编译好了,而不是原始代码。 –

+0

似乎ExternalProject或add_subdirectory是解决方案。 –