2009-11-23 3 views
2

J'ai travaillé sur un vieux jeu que j'ai créé des fichiers CMake pour se débarrasser d'un mélange de projets Makefiles et studio visuel. Tout fonctionne bien, mais j'ai du mal à trouver la bonne façon de permettre au développeur de spécifier où les fichiers de sortie sont copiés lors de l'exécution de l'installation. Le problème est que de nombreuses DLL et certaines cibles personnalisées nécessitent que leur sortie soit copiée dans une structure de répertoires contenant les données du jeu (niveaux, art, son, etc.) avant de pouvoir tester le code. Mes commandes d'installation utilisent actuellement une variable que je 'SET' au niveau supérieur CMakeLists.txt pour spécifier le répertoire de sortie. J'ai essayé de le remplacer par -DD3_GAMEDIR sur la ligne de commande cmake. Cette variable est définie dans le CMakeCache, mais la commande SET apparaît pour la surcharger.Quelle est la bonne façon de personnaliser le répertoire de sortie d'installation pour chaque développeur dans CMake?

Dois-je vérifier la longueur de la variable avant d'utiliser SET pour voir si l'utilisateur a spécifié une valeur? Cela me semble être un hack, mais j'ai du mal à trouver la bonne façon de le faire.

Merci!

Répondre

1

Voici le anwser, selon votre version CMake:

SET(CMAKE_VERSION "${CMAKE_CACHE_MAJOR_VERSION}.${CMAKE_CACHE_MINOR_VERSION}") 
IF("${CMAKE_VERSION}" STRGREATER "2.4") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY /path/of/your/install/${CMAKE_BUILD_TYPE}/bin) 
SET(CMAKE_LIBRARY_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/lib) 
ELSE("${CMAKE_VERSION}" STRGREATER "2.4") 
SET(EXECUTABLE_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/bin) 
SET(LIBRARY_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/lib) 
ENDIF("${CMAKE_VERSION}" STRGREATER "2.4") 
3

L'installation cible prend en charge le paramètre DESTDIR, de sorte que vous pouvez faire quelque chose comme:

make install DESTDIR="C:\RootGameDir"

L'autre option est de ne définir la variable si elle n'est pas déjà (if(myVar)), mais je préfèrent personnellement la solution DESTDIR.

1

Qu'en est-il en utilisant les différents CMAKE_INSTALL_PREFIX, PROJECT_SOURCE_DIR et PROJECT_BINARY_DIR?

Questions connexes