Skip to content

Instantly share code, notes, and snippets.

@scivision
Last active March 18, 2024 14:02
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save scivision/bb1d47a9529e153617414e91ff5390af to your computer and use it in GitHub Desktop.
Save scivision/bb1d47a9529e153617414e91ff5390af to your computer and use it in GitHub Desktop.
CMake: init/update a Git submodule and add_subdirectory()
find_package(Git REQUIRED)
function(add_git_submodule dir)
# add a Git submodule directory to CMake, assuming the
# Git submodule directory is a CMake project.
#
# Usage: in CMakeLists.txt
#
# include(AddGitSubmodule.cmake)
# add_git_submodule(mysubmod_dir)
if(NOT EXISTS ${dir}/CMakeLists.txt)
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- ${dir}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMAND_ERROR_IS_FATAL ANY)
endif()
add_subdirectory(${dir})
endfunction(add_git_submodule)
cmake_minimum_required(VERSION 3.19)
project(Demo LANGUAGES NONE)
include(AddGitSubmodule.cmake)
add_git_submodule(my_submod_dir)
@adi-g15
Copy link

adi-g15 commented Jun 30, 2021

Thanks for the gist 🙂🙏
I was searching for how to do this in cmakelists if user missed recursively cloning.

@Chrd26
Copy link

Chrd26 commented Mar 18, 2024

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment