cmake构建中的动态子目录

时间:2018-12-04 18:32:29

标签: cmake

我正在为我继承的项目设置一个Cmake构建环境。我有一个核心存储库,该存储库创建了可以加载“插件”的目标(dll目标)。我想将每个插件都保留在自己的存储库中(每个插件代表一个特定的硬件平台,应单独维护)。

我有一个名为“插件”的目录,可以根据需要在其中克隆这些存储库文件夹。

如何使“插件”文件夹中的CMakeLists.txt添加所有插件文件夹,而不为每个插件添加显式的add_sub目录?

我的目标是允许提供源代码外配置和调试/发布目标的构建脚本,也允许平台目标签出用户选择的平台的存储库,按要求配置和构建。这是我不确定如何设置的唯一作品。

1 个答案:

答案 0 :(得分:0)

在执行示例程序时,我有一个CMake宏,该宏枚举了当前文件夹的子目录:

#########################################################################################

macro(SUBDIRLIST result curdir)
  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
  SET(dirlist "")
  FOREACH(child ${children})
    IF(IS_DIRECTORY ${curdir}/${child})
        SET(dirlist ${dirlist} ${child})
    ENDIF()
  ENDFOREACH()
  SET(${result} ${dirlist})
endmacro()

然后使用此宏在包含子目录的文件夹中创建以下CMakeLists.txt:

SUBDIRLIST(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR})

FOREACH(subdir ${SUBDIRS})
    ADD_SUBDIRECTORY(${subdir})
ENDFOREACH()

CMake使用此父文件夹生成时,它将使用add_subidrectory()自动添加其中包含的每个文件夹