`submodule.<name>.shallow=true` don't work in the CMakeLists.txt

I was partially correct. You don’t need to set SOURCE_DIR or BINARY_DIR, but SUBBUILD_DIR has no default. You can confirm the behavior for SOURCE_DIR and BINARY_DIR with the following minimal example project:

cmake_minimum_required(VERSION 3.30)
project(example)

include(FetchContent)
FetchContent_Declare(
    location_tags
    DOWNLOAD_COMMAND ${CMAKE_COMMAND} -E echo "SOURCE_DIR = <SOURCE_DIR>"
    COMMAND ${CMAKE_COMMAND} -E echo "BINARY_DIR = <BINARY_DIR>"
)
FetchContent_MakeAvailable(location_tags)

Note the first line requires at least CMake 3.30 for the above to work, otherwise you won’t see the output from those commands.