Aprendizaje de CMake (3): use add_subdirectory() para agregar una carpeta de proyecto externa

        En circunstancias normales, cada subproyecto de nuestro proyecto está en un directorio raíz general del proyecto, pero a veces necesitamos usar carpetas externas, ¿qué debemos hacer? Por ejemplo, cxx/utility/exampledentro de un directorio CMakeLists.txtdesea hacer referencia al directorio superior cxx/utility: CMakeLists.txtgeneralmente
Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí
        , si cxx/utility/exampledentro de un directorio CMakeLists.txtlo usa directamente.

add_subdirectory(${
    
    CMAKE_CURRENT_SOURCE_DIR}/..)

        Cuando se ejecute cmake -B build, se informará un error:

CMake Error at CMakeLists.txt:14 (add_subdirectory):
  add_subdirectory not given a binary directory but the given source
  directory "D:/workspace/sdk/base/cxx/utility" is not a subdirectory of
  "D:/workspace/sdk/base/cxx/utility/example".  When specifying an
  out-of-tree source a binary directory must be explicitly specified.

        Motivo del error : porque la carpeta que se agregará no es un subdirectorio del proyecto actual. La última frase indica el camino: para especificar una carpeta externa debes especificarla explícitamente. ¿Pero cómo especificarlo explícitamente? Consulte la documentación oficial.
Insertar descripción de la imagen aquí        Resulta que add_subdirectoryhay otro binary_dirparámetro, que se usa para especificar source_dirla ubicación en la carpeta de salida. Si no se especifica, source_dirse usa el valor. binary_dirEsto debe especificarse si desea agregar una carpeta externa . cxx/utility/exampleLos cambios en el interior CMakeLists.txtson:

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/.. 3rdparty/base/utility)

        Después de la ejecución, cmake -B buildpuede encontrar subdirectorios adicionales en el directorio de salida , que se especifica mediante 3rdparty/base/utilityel segundo parámetro :binary_dir
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/hezhanran/article/details/123896355
Recomendado
Clasificación