设置具有多个独立组件的项目的最佳方法是什么?
我的项目没有顶级CMakeLists文件,它包含多个组件。其中一些可以独立构建,而另一些则依赖于其他组件。 例如,组件A和B可以自行构建和使用(并且可以由多个单独的目标组成),而组件C则需要A和B进行构建。
项目布局:
├───component_A
│ CMakeLists.txt
│ main.cpp
│
├───component_B
│ CMakeLists.txt
│ main.cpp
│
└───component_C
CMakeLists.txt
main.cpp
我可以看到3种可能性,但似乎没有一种是有效或可行的:
使用add_subdirectory(component_A CMAKE_BINARY_DIR / componentA)。
ExternalProject_Add()似乎太局限,无法处理大量组件
将每个组件作为一个软件包进行处理,并使用find_package 包括他们。配置,安装等如何工作 这种情况?
答案 0 :(得分:0)
一个简单的解决方案是使用一些CMake options
创建一个顶级CMake,以使您可以控制整个项目中的内容。这些选项将被填充,并且可以在CMake GUI中进行更改,但是如果从命令行运行cmake
,也可以对其进行控制。这是适合您情况的简单顶级CMake文件,如下所示:
cmake_minimum_required(VERSION 3.11)
project(TopLevelProject)
# Define options to easily turn components ON or OFF.
option(ENABLE_COMPONENT_A "Option to include component A" ON)
option(ENABLE_COMPONENT_B "Option to include component B" OFF)
option(ENABLE_COMPONENT_C "Option to include component C" OFF)
# Determine which components are included and built by default in ALL_BUILD.
if(ENABLE_COMPONENT_C)
# Need all three components in this case.
add_subdirectory(component_A)
add_subdirectory(component_B)
add_subdirectory(component_C)
else()
if(ENABLE_COMPONENT_A)
add_subdirectory(component_A)
endif()
if(ENABLE_COMPONENT_B)
add_subdirectory(component_B)
endif()
endif()
在此示例中,仅选项A为ON
,因此仅组件A将包含在生成的构建系统中。即使包括所有组件,您仍然可以选择在生成构建系统后分别构建哪些项目(或目标)。