142 votes

Répertoire de sortie/de construction de CMake

Je suis assez nouveau dans CMake, et j'ai lu quelques tutoriels sur la façon de l'utiliser, et j'ai écrit quelques 50 lignes compliquées de CMake script afin de faire un programme pour 3 compilateurs différents. Ceci conclut probablement toutes mes connaissances en CMake.

Mon problème est que j'ai du code source, dont je ne veux pas toucher/se mêler au dossier lorsque je crée le programme. Je veux que tout CMake et make les fichiers et dossiers de sortie à placer dans ../Compile/ J'ai donc modifié quelques variables dans mon script CMake pour cela, et cela a fonctionné pendant quelques temps lorsque j'ai fait quelque chose comme ça sur mon ordinateur portable :

Compile$ cmake ../src
Compile$ make

Avec cela, j'ai eu une sortie propre dans le dossier où je suis maintenant, ce qui est exactement ce que je recherche.

Maintenant, j'ai déménagé sur un autre ordinateur, et j'ai recompilé CMake 2.8.11.2, et je suis presque de retour à la case départ ! Il compile toujours la chose dans le src où mon CMakeLists.txt est situé.

La partie où je choisis le répertoire dans mon CMake script est la suivante :

set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/)
set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir})
set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
set(CMAKE_BUILD_DIRECTORY ${dir})
set(CMAKE_BINARY_DIR  ${dir})
SET(EXECUTABLE_OUTPUT_PATH ${dir})
SET(LIBRARY_OUTPUT_PATH ${dir}lib)
SET(CMAKE_CACHEFILE_DIR ${dir})

Et maintenant, ça se termine toujours par :

-- Build files have been written to: /.../src

Est-ce que j'ai manqué quelque chose ?

1voto

Martin Flaska Points 193

A partir de cmake 3.19, vous pouvez aussi utiliser fichiers prédéfinis où vous pouvez spécifier, entre autres choses utiles, le répertoire binaire de sortie :

{
  "version": 2,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 19,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "default",
      "displayName": "Default",
      "description": "Default build cfg",
      "generator": "Unix Makefiles",
      "binaryDir": "${sourceDir}/Compile",
      "cacheVariables": {
      },
      "environment": {
      }
    }
  ]
}

Ensuite, il suffit de lancer cmake avec --preset arg :

cmake --preset=default

Ensuite, juste cd dans votre répertoire de construction et exécutez make dans votre cas :

cd ./Compile
make

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X