Dans des circonstances normales, chaque sous-projet de notre projet se trouve dans un répertoire racine général du projet, mais parfois, nous devons utiliser des dossiers externes. Que devons-nous faire ? Par exemple, cxx/utility/example
dans un répertoire CMakeLists.txt
, vous souhaitez faire référence au répertoire supérieur cxx/utility
: CMakeLists.txt
généralement
, si cxx/utility/example
dans un répertoire CMakeLists.txt
vous l'utilisez directement.
add_subdirectory(${
CMAKE_CURRENT_SOURCE_DIR}/..)
Une fois exécuté cmake -B build
, une erreur sera signalée :
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.
Raison de l'erreur : Parce que le dossier à ajouter n'est pas un sous-répertoire du projet en cours. La dernière phrase montre la voie : pour spécifier un dossier externe, vous devez le spécifier explicitement. Mais comment le préciser explicitement ? Consultez la documentation officielle.
Il s'avère add_subdirectory
qu'il existe un autre binary_dir
paramètre, qui est utilisé pour spécifier source_dir
l'emplacement dans le dossier de sortie. S'il n'est pas spécifié, source_dir
la valeur est utilisée. binary_dir
Ceci doit être précisé si vous souhaitez ajouter un dossier externe . cxx/utility/example
Les changements à l'intérieur CMakeLists.txt
sont :
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/.. 3rdparty/base/utility)
Après l'exécution, cmake -B build
vous pouvez trouver des sous-répertoires supplémentaires dans le répertoire de sortie , qui est spécifié par 3rdparty/base/utility
le deuxième paramètre :binary_dir