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/example
dentro de un directorio CMakeLists.txt
desea hacer referencia al directorio superior cxx/utility
: CMakeLists.txt
generalmente
, si cxx/utility/example
dentro de un directorio CMakeLists.txt
lo 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.
Resulta que add_subdirectory
hay otro binary_dir
parámetro, que se usa para especificar source_dir
la ubicación en la carpeta de salida. Si no se especifica, source_dir
se usa el valor. binary_dir
Esto debe especificarse si desea agregar una carpeta externa . cxx/utility/example
Los cambios en el interior CMakeLists.txt
son:
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/.. 3rdparty/base/utility)
Después de la ejecución, cmake -B build
puede encontrar subdirectorios adicionales en el directorio de salida , que se especifica mediante 3rdparty/base/utility
el segundo parámetro :binary_dir