Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用什么样的CMake项目结构:多个应用程序、插件、配置_Cmake - Fatal编程技术网

使用什么样的CMake项目结构:多个应用程序、插件、配置

使用什么样的CMake项目结构:多个应用程序、插件、配置,cmake,Cmake,我正在寻找一种惯用的方法来构造一个项目,该项目具有多个应用程序(可执行文件)、插件库(共享库)和在运行时加载的配置(例如features.json) 基本上,有多个物理设备共享一些公共代码。大多数通用代码都是以静态库的形式构建的,并链接到大约六个应用程序中——一个主应用程序和几个辅助测试应用程序。主应用程序在运行时加载插件,但加载的插件取决于设备类型。最后,插件本身的功能根据features.json中的特性略有不同。这些功能定义了设备可能具备的功能(例如,WiFi与否、SD卡插槽与否) 为每个

我正在寻找一种惯用的方法来构造一个项目,该项目具有多个应用程序(可执行文件)、插件库(共享库)和在运行时加载的配置(例如features.json)

基本上,有多个物理设备共享一些公共代码。大多数通用代码都是以静态库的形式构建的,并链接到大约六个应用程序中——一个主应用程序和几个辅助测试应用程序。主应用程序在运行时加载插件,但加载的插件取决于设备类型。最后,插件本身的功能根据features.json中的特性略有不同。这些功能定义了设备可能具备的功能(例如,WiFi与否、SD卡插槽与否)

为每个设备创建一个唯一的顶级CMakeLists.txt文件,并让每个设备的add_子目录包含公共文件夹和特定插件,这是惯用做法吗

Device1/CMakeLists.txt
(pulls in below via add_subdirectory)
 |_ LIBS
 |_ Apps
 |_ Plugin1
 |_ Plugin4

Device2/CMakeLists.txt
(pulls in below via add_subdirectory)
 |_ LIBS
 |_ Apps
 |_ Plugin2
 |_ Plugin3
其结果是多个生成文件夹,每种设备类型一个。顶级CMake文件负责选择合适的插件进行构建,并复制/创建合适的features.json文件与插件一起安装

交替(案例2)

拥有一个通用的顶级CMakeLists.txt,并在生成时读入某种文件,该文件列出了设备,并尝试在一个生成文件夹中创建多个“安装”区域:

CMakeLists.txt
(pulls in below via add_subdirectory)
|_ LIBS
|_ Apps
|_ Plugin1
|_ Plugin2
|_ Plugin3
|_ Plugin4
最后的项目设置需要一些cmake来读取一个文件,其中包含设备和它们需要的插件,以及要复制到构建文件夹的相应区域的功能文件

输出(情况2):

后者似乎可以最小化编译时间和文件系统使用(只有一个构建文件夹),但它需要为每种设备类型的不同目标创建多个“安装”位置。我会寻找现有的项目,但在开源世界中,我想不出一个使用CMake并且必须支持多种设备配置的项目

Build
 |_device1_artifacts (APPS, Plugin1, Plugin4, features1.json)
 |_device2_artifacts (APPS, Plugin2, Plugin3, features2.json)
 |_ ...