用不提供预构建二进制文件的依赖项构建项目的正确方法是什么(或者如果您想自己构建依赖项)
通常我的项目结构如下
/root/
- Dependencies/
- ...Subdirs...
- Output/
- CMakeLists.txt
如果一个库已经构建,通常你可以简单地使用find_package
将其作为依赖项。
但是,如果没有为每个依赖项执行cmake,它们将没有<PackageName>Config.cmake
,因此不能使用find_package
找到。
因此,问题是,如果您希望/必须在多个平台上从源代码构建依赖项,您如何组织项目。
- 使用建立所有依赖关系的脚本
- 创建一个执行类似操作的cmake目标
- 其他的
如果一个依赖项还有另一个依赖项也需要构建,该怎么办?
对于.ignore
文件,最好将/cmake的所有依赖项都构建到Output/
目录中
2条答案
按热度按时间63lcw9qa1#
通常库的
CMakeLists.txt
被配置为引入一个 library 目标。这意味着你可以把它添加到你自己的项目中,并以 * 几乎 * 与使用find_package
依赖项相同的方式使用它。假设项目目录如下所示:如果
lib1
和lib2
在其相应的文件夹(lib1Folder
和lib2Folder
)中具有CMakeLists.txt
配置,则可以将它们添加到您自己的CMakeLists.txt
中,如下所示:其中
MyExecutable
是你想链接依赖项的目标的名称。当然不同的库可能有不同的配置(一些库使包含文件夹本身可变,其他库可能不这样做,也没有显式给定include
文件夹),但这对我个人来说大多数时候都是有效的。xghobddn2#
如果项目是cmake项目,则可以将其添加为子目录,并使用以下命令将其添加到生成中:
之后,您可以将生成目标作为依赖项添加到您的项目中,以便cmake在它们不存在的情况下生成它们。
For example if you want to use cpputest in your project, you add it to
Dependencies/cpputest“',并将其添加到cmake中cpputest的所有目标都将构建在您的构建目录的子目录中。
如果构建
my_binary
,则会自动构建cpputest。你可以看一下一个项目,我在那里用了这个:https://github.com/sweintritt/cora
依赖项作为子模块添加到子目录
third_party
中,并添加到cmake/dependencies.cmake
中的构建中。