CMake no incluye el directorio de encabezado del submódulo A dentro del submódulo B

Tengo un proyecto CMake que se ve así:

project/
  CMakeLists.txt
  subprojectA/
    CMakeLists.txt
    include/
      headerA.hpp
    src/
      libraryA.cpp
  subprojectB/
    CMakeLists.txt
    src/
      mainB.cpp

El subproyecto "biblioteca", A, se compila como una biblioteca estática, convirtiéndose en libsubprojectA.a. El proyecto "principal", B, se compila como binario y depende de la biblioteca. mainB.cpp incluye una referencia a headerA.hpp.

Aquí está el subproyecto A / CMakeLists.txt:

project(SubProjectA)
include_directories(include)
add_library(subprojectA STATIC src/libraryA.cpp)
set(${PROJECT_NAME}_INCLUDE_DIRS
    ${PROJECT_SOURCE_DIR}/include
    CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)

Y aquí está el subproyecto B / CMakeLists.txt:

project(SubProjectB)
include_directories(${SubProjectA_INCLUDE_DIRS})
add_executable(mainBinary src/mainB.cpp)
target_link_libraries(mainBinary subprojectA)

El proyecto principal CMakeLists.txt se ve así:

project(Project)
add_subdirectory(subprojectB)
add_subdirectory(subprojectA)

Tenga en cuenta que el subproyecto B, el proyecto principal, está en la listaantes de subproyectoA.

Aquí está el problema. Cuando ejecuté "cmake" por primera vez en este proyecto,${SubProjectA_INCLUDE_DIRS} no está establecido en SubProjectB.

Lo que creo que está sucediendo es que las CMakeLists para SubProjectB se cargan primero, cuando${SubProjectA_INCLUDE_DIRS} aún no se ha configurado. Establece su propia ruta de inclusión a una cadena vacía como resultado. Sin embargo, aunquelibsubprojectA.a se construye con éxito antesmainBinary, la ruta de inclusión ya estaba vacía de antemano. Como resultado, recibo este error cuando intento hacermainBinary:

subprojectB/src/mainB.cpp:1:23: fatal error: headerA.hpp: No such file or directory
#include "headerA.hpp"
                      ^

Es una solución alternativa poner el subproyecto A antes que el subproyecto B en el proyecto principal CMakeLists en el mundo declarativo de CMake. Lo que realmente quiero es saber la forma correcta de indicarle a CMake que elinclude_directories(${SubProjectA_INCLUDE_DIRS}) líneadepende en las definiciones que existen dentro de CMakeLists de SubProjectA. ¿Hay una mejor manera de hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta