2017-10-14 1 views
1

Je souhaite supprimer des bibliothèques spécifiques d'une variable CMake.Suppression d'une partie spécifique de la variable

Suppose LIB contient la valeur des variables "A, B, C", Je sais utiliser set pour ajouter le comtent d'une autre variable "D" comme celui-ci

set(LIB ${LIB};D) 

Cependant, j'essayé d'enlever " C "de LIB comme suivant

unset(LIB C) 

Ce code ne fonctionne pas. Est-ce que quelqu'un sait comment faire cela?

Répondre

2

Ce n'est pas ainsi que fonctionne unset. Dans votre exemple, unset(LIB C) désactive les deux variables LIB et C. Il ne supprime pas la partie C de LIB.

Comme toutes les variables sont des chaînes internes dans CMake, vous devez utiliser string(REPLACE). Dans votre cas

string(REPLACE C "" LIBwithoutC LIB) 

remplace toutes les occurrences de C par une chaîne vide et stocke le résultat dans LIBwithoutC. Vous pourriez vouloir affiner ceci pour enlever le point-virgule supplémentaire.

+1

Après avoir essayé plusieurs fois, je trouve 'string (REPLACE "C;" "" LIBwithoutC "$ {LIB}")' œuvres. L'utilisation de "$ {LIB}" peut traiter ces variables comme une chaîne. https://cmake.org/pipermail/cmake/2016-January/062594.html –

-2

Il y a au moins trois façons dont vous savez probablement déjà:

run cmake-gui (or make edit_cache) to open the "cache editor", i.e. the GUI for cmake 
the "Holzhammer" method: simply remove the complete cache or build directory and start again 
and delete the entries you don't want there 
open CMakeCache.txt in a text editor and edit it manually 

Il y a une autre façon de le faire que vous ne savez peut-être pas encore. En plus de "-D" (définir une variable) cmake a également "-U" (variable indéfinie), que vous pouvez utiliser pour supprimer des entrées du cache. Ca va comme ça: $ cmake -U * QT *.