1

我在cmake上崩溃了。我还没有正确理解它的所有力量,但是我在任何地方都读到它值得学习它所以......我在这里。

我想建立一个构建环境,在其中使用我通常使用的一些好的库(Qt、OpenGL、OpenCV 等),并且我可以轻松编写应用程序或模块(我们暂时称它们为模块)在应用程序中使用。

我想到的文件夹结构类似于:

/apps/app_with_foo_and_qt_gui
/apps/app_with_foo
/apps/app_with_foo_and_foo1
/modules/foo
/modules/foo1

根据我得到的信息,我需要在应用程序中使用find_package包含在 foo 或 foo1 中的命令,但我的主要观点是,该命令似乎正在寻找查找或配置文件,我不明白两者之间的区别他们。

然后,我的想法是在我的每个模块中都有一个built文件夹来放置模块的已编译部分(因为每次编译使用它的应用程序时都不编译它)和一个测试文件夹来放置测试。但是我不太清楚如何编译测试。

一些澄清?

4

1 回答 1

2

关于 Find*.cmake 和Config.cmake,这两个文件完成了查找和提供有关包的信息的相同任务。但是,那里的交互方法不同。使用 Find .cmake 文件,CMake 将使用它们来搜索各种详细信息。例如,CMake 的 FindQt4.cmake 文件将在您的系统中搜索 qmake,并使用该设置的各种变量将 Qt4 与 CMake 一起使用。另一方面,*Config.cmake 文件包含预定义的数据,这些数据有关包的各个部分在系统上的位置。例如,如果存在 Qt4Config.cmake 文件,它不会查询 qmake 的路径,而是包含 Qt4 的预计算路径。有关更多详细信息,请参阅 CMake 关于find_package 的文档。

因此,我对您的项目结构的建议是将 foo 和 foo1 安装为系统库,并使用Config.cmake 文件查找有关它们的各种详细信息。请注意,您不必将 foo库安装到系统中,而是可以将它们安装到本地目录(您的构建文件夹或一般位置,如 /modules/install 等)。

然后每个应用程序都可以使用 CMake 的find_package查询适当的部分。

为了创建 *Config.cmake 文件,CMake有一些文档位于此处。

于 2013-10-07T21:18:46.597 回答