7
votes

CUKE: Définition des annuaires et des bibliothèques de liaison pour différentes cibles de construction

J'ai un projet VS2008 ici. Ses fichiers de projet sont générés par CMAKE. Ce que je veux faire, c'est définir des bibliothèques et des annuaires de bibliothèque pour la cible de débogage et de libération de manière indépendante, c'est-à-dire des libs de libertés pour la cible de libération et de débogage des libs pour la cible de débogage bien sûr.

Jusqu'à présent, je n'ai aucune idée de comment faire cela. Je sais que je peux définir différents arguments du compilateur avec cmake_cxx_flags_debug et cmake_cxx_flags_release par exemple (ou si les cibles de construction sont nommées), mais je n'ai aucune idée de la façon de faire cela pour le lien DIRS et des libs.

Un collègue qui a créé le fichier CmAkelistes avec toutes les définitions qui l'ont essayé avec xxx

par exemple, mais cela ne fonctionne pas. Selon certains CMAKE Wiki, la variable CUKE_BUILD_TYPE n'est pas définie à la durée de configuration, uniquement au moment de l'exécution, en fonction de la cible que vous exécutez, naturellement.

actuellement à une impasse et apprécierait les indications ou les directions :).


0 commentaires

3 Réponses :


0
votes

Vous pouvez simplement invoquer votre cmake avec le jeu de configuration déjà:

cmake -dMyConfigType="DebugStaticX86"

#CMakeLists.txt
if( ${MyConfigType} STREQUAL "DebugStaticX86" )
  set( CMAKE_BUILD_TYPE Debug )
  set( MyLinkType Static )
  set( MyPlatform x86 )
  #now include other files that set the actual compile/link options
  #depending on values of MyLinkType and MyPlatform
  ....
endif


4 commentaires

Eh bien, mais je veux créer un fichier .vcproj avec les configurations de publication et de débogage. Si je le fais de cette façon, je disposerai d'un fichier de projet avec uniquement le débogage ou la configuration de libération?


Autant que je sache, oui. Ne pensez pas que ce soit possible d'avoir CLAKE générer plus d'une configuration à la fois et qui affecte toutes les sorties non seulement VCPROJ.


Eh bien, la cmake est capable de le faire. Par exemple, je peux utiliser cmake_cxx_flags_debug et cmake_cxx_flags_release (ou toutefois la configuration est nommée) afin de spécifier des indicateurs de compilateur pour chaque configuration. Je pensais qu'il y aurait aussi un moyen d'autres options, pour la liaison par exemple.


La façon dont Tibur montre devrait faire cela, mais vous êtes toujours laissé avec un VCPROJ contenant uniquement le débogage ou la libération, pas les deux.



13
votes

Il y a une option cible_link_libraires code> qui vous aide à le faire. Mais vous devrez élargir votre nom de la bibliothèque au chemin complet.

link_directories(c:/path/to/all/libs/$(ConfigurationName)/)


5 commentaires

HM, quelle est exactement la création de cmake, si j'utilise cible_link_libraries? Est-ce que Cmake se distingue le chemin et écrit les informations dans le fichier de projet séparément vers le dossier de la bibliothèque et les fichiers de bibliothèque?


Si vous spécifiez un chemin complet pour une bibliothèque dans la commande cible_link_libraires , il ajoutera le nom de la bibliothèque avec son chemin complet dans le champ Fichiers de la bibliothèque. Je n'utilise généralement pas la commande link_directories . Ma réponse a été: Utilisez cible_link_libraries avec débogage et mots-clés optimisés ou Utiliser link_directories .


Je vois. Cependant, j'ai un autre problème avec cible_link_libraries. Je ne sais pas exactement quoi mettre dans le premier argument. Il peut être difficile de décrire pour moi quel est exactement le problème, car je ne comprends toujours pas parfaitement, comment Clake est mis en place pour ce projet (quelqu'un d'autre l'a fait et je dois maintenant travailler avec cela / changer quelque chose). Je pense que le problème est que ce fichier CMAKELIST.txt est utilisé par 2 projets, qui sont nommés différemment, et donc je ne peux donc pas utiliser une cible_link_libraries (FOO DEBUG ...).


Le premier argument de cible_link_libraries (myProgram ...) (la norme consiste à utiliser minuscule pour les fonctions de cumake, maintenant) est le nom du programme (pas le projet) que vous compilez à l'aide de add_executable (myprogramme ...) .


Je crois que c'est $ (configuration) et non $ (ConfigurationName)



1
votes
include_directories("${DEVINSTPREFIX}$<$<CONFIG:Debug>:/debug>/include")
link_directories("${DEVINSTPREFIX}$<$<CONFIG:Debug>:/debug>/lib")

include_directories("${DEVINSTPREFIX}$<$<CONFIG:Release>:/release>/include")
link_directories("${DEVINSTPREFIX}$<$<CONFIG:Release>:/release>/lib")
This assumes:
prefix/ contains mixed stuff where you use find_package to select the correct stuff.
prefix/debug contains "manually" configured debug builds
prefix/release contains "manually" configured release builds.

0 commentaires